如何从给定ID的数据库自动检索数据?
Posted
技术标签:
【中文标题】如何从给定ID的数据库自动检索数据?【英文标题】:how to retrieve data from db automatic of given id? 【发布时间】:2014-01-22 13:23:37 【问题描述】:您好,我正在使用 swing 进行数据检索,我能够检索有关操作执行的数据。
但是当我运行这个程序时我想检索数据自动给定 id 数据检索来自
数据库。 请帮帮我
谢谢
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.*;
public class BankGui extends JApplet implements ActionListener
// GUI components
JLabel lblUser, lblPass,lblnull,lbl1;
JTextField txtid;
JTextField txtUser;
JTextField txtPass;
JButton btnOk, btnClear;
// connections to mysql
private static Connection connection = null;
private static Statement statement = null;
private static ResultSet resultSet = null;
//public static Scanner in = new Scanner(System.in);
public void init()
Container c = getContentPane();
c.setLayout( new FlowLayout() );
lblUser = new JLabel( "Username: " );
c.add( lblUser );
txtUser = new JTextField( 10 );
c.add( txtUser );
lblPass = new JLabel( "Password:" );
c.add( lblPass );
txtPass = new JTextField( 10 );
c.add( txtPass );
lbl1 = new JLabel( "Enter id" );
c.add( lbl1);
txtid=new JTextField(10);
c.add(txtid);
btnOk = new JButton( "OK" );
btnOk.addActionListener( this );
c.add( btnOk );
lblnull= new JLabel("");
c.add(lblnull);
@Override
public void actionPerformed(ActionEvent e)
PreparedStatement stmt=null;
boolean isFound=false;
try
connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test", "root", "");
// String sql="SELECT uname FROM users1 WHERE uname=? and pwd=?";
String sql = "SELECT * FROM users WHERE uid = '"+2+"'";
stmt=connection.prepareStatement(sql);
//stmt.getString(1,txtUser.getText());
// stmt.setString(2,txtPass.getText());
resultSet=stmt.executeQuery();
if(resultSet.next())
isFound=true;
// String s=resultSet.getString(1);
// String s1=resultSet.getString(2);
//System.out.println(s);
txtPass.setText(resultSet.getString(1));
lblnull.setText(resultSet.getString(2));
// System.out.println(s1);
//
catch(SQLException ex)
System.err.println(ex);
finally
if(stmt!=null)
try
stmt.close();
catch(Exception ex) /* */
if(connection!=null)
try
connection.close();
catch(Exception ex) /* */
static
try
Class.forName("com.mysql.jdbc.Driver");
catch(Exception ex)
System.err.println(ex);
【问题讨论】:
uid
中的users
表中的DataType
是Varchar
或int
?
uid的数据类型是int
【参考方案1】:
如果uid
的数据类型是int
,那么您的查询应该是
String sql = "SELECT * FROM users WHERE uid = "+2;
'2'
用于varchar
数据类型
【讨论】:
【参考方案2】:除了@AJ 回答我还有一些提示:
数据库调用是耗时的任务,可能会阻塞 Event Dispatch Thread(又名 EDT),导致 GUI 无响应。为避免此问题,请考虑使用SwingWorker 在后台线程中执行数据库调用并更新 EDT 中的 Swing 组件。在Concurrency in Swing trail 中查看更多信息。
忽略 catch 块中的异常不是一个好习惯:catch(Exception ex)
请注意,您的查询容易受到SQL injection 攻击。为避免这种情况,您可能需要改用PreparedStatement。
示例:
String sql = "SELECT * FROM users WHERE uid = ?";
PreparedStatement pst = connection.prepareStatement(sql);
pst.setInt(1, 2); // see PreparedStatement.setInt(index, value)
ResultSet rs = pst.executeQuery();
【讨论】:
以上是关于如何从给定ID的数据库自动检索数据?的主要内容,如果未能解决你的问题,请参考以下文章