我正在使用Java为学校计划创建一个注册页面。我默认在数据库中创建了一个包含3个用户(Admin,Student Leader& Student)的表。现在,任何学生都可以使用自己的用户名注册密码。我试图将用户输入的文本插入数据库表但错误是“org.sqlite.SQLiteException:[SQLITE_ERROR] SQL错误或缺少数据库(没有这样的列:用户名)”,我真的不明白为什么是那里缺少数据库。 这是我的代码:
JButton btnSubmit = new JButton("Submit");
btnSubmit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//declare variables
String username = "";
String password = "";
String name = "";
String AdminNo = "";
//get values using getText() method
username = txtUsername.getText().trim();
password = txtPassword.getText().trim();
name = txtName.getText().trim();
AdminNo = txtAdminNo.getText().trim();
if(username.equals("") || password.equals("")){
JOptionPane.showMessageDialog(null, "Name/Password is wrong");
}
else //Insert whether query is running properly
{
Connection conn = sqliteConnection.dbConnector();
String IQuery = "INSERT INTO Login(Username,Password,Name,AdminNo)" + "VALUES(username,password,name,AdminNo)";
System.out.println(IQuery); //Print to console
System.out.println("Connecting to a selected database");
try {
((Connection) conn).createStatement().execute(IQuery);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} // select the rows
}
}
});
这是我的数据库表: Login Table
答案 0 :(得分:4)
这是您尝试执行的查询:
INSERT INTO Login(Username,Password,Name,AdminNo) VALUES(username,password,name,AdminNo)
这是无效的。您的Java代码中的username
,password
,name
,AdminNo
变量不会神奇地插入到查询字符串中。
你必须自己插入它们。
要做得对,你应该使用prepared statements,如下所示:
PreparedStatement statement = null;
String sql = "INSERT INTO Login (Username, Password, Name, AdminNo) VALUES (?, ?, ?, ?)";
try {
statement = conn.prepareStatement(sql);
statement.setString(1, username);
statement.setString(2, password);
statement.setString(3, name);
statement.setString(4, adminNo);
statement.executeUpdate();
} catch (SQLException e ) {
e.printStackTrace();
} finally {
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
小注意:在上面的代码中,我将AdminNo
变量重命名为adminNo
,因为这是Java中推荐的变量名称命名方式(称为" camelCase")