【问题标题】:Error with inserting data into SQL database in Java在 Java 中将数据插入 SQL 数据库时出错
【发布时间】:2017-12-28 14:52:16
【问题描述】:

我正在使用 Java 为一个学校项目创建一个注册页面。默认情况下,我在数据库中创建了一个包含 3 个用户(管理员、学生领导和学生)的表。现在任何学生都可以使用自己的用户名和密码进行注册。我试图将用户输入的文本插入数据库表,但错误是“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

【问题讨论】:

  • 我猜你想要: "INSERT INTO Login(Username,Password,Name,AdminNo)" + "VALUES('" + username + "', '" + password + "', '" +名称 + "', '" + AdminNo + "')";.但我建议阅读 SQL-Injection。

标签: java mysql database


【解决方案1】:

这是您尝试执行的查询:

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”)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多