在Java中将数据插入SQL数据库时出错

时间:2017-07-22 16:01:51

标签: java mysql database

我正在使用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

1 个答案:

答案 0 :(得分:4)

这是您尝试执行的查询:

INSERT INTO Login(Username,Password,Name,AdminNo) 
VALUES(username,password,name,AdminNo)

这是无效的。您的Java代码中的usernamepasswordnameAdminNo变量不会神奇地插入到查询字符串中。 你必须自己插入它们。

要做得对,你应该使用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")