2017-07-22 5 views
1

Javaを使用してスクールプログラムのサインアップページを作成しています。私は3人のユーザー(Admin、Student Leader & Student)のテーブルをデフォルトで作成しました。現在、どの生徒も自分のユーザ名である&のパスワードでサインアップできます。私は、ユーザーがテキストをデータベーステーブルに挿入しようとしましたが、エラーは "org.sqlite.SQLiteException:[SQLITE_ERROR] SQLエラーまたはデータベースがありません(そのような列はありません:username)"です。そこにデータベースがありません。 これは私のコードです:Javaの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 



      } 

     } 
    }); 

そして、これは私のデータベース表である:

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

これは次のとおりです。 Login Table

+0

"INSERT INTOログイン(ユーザー名、パスワード、名前、管理番号)" + "VALUES(" "+ username +" '、 "+ password +"'、+ "+ name +" ' '"+ AdminNo +"') ";しかし、私はSQLインジェクションを読むことをお勧めします。 –

答えて

4

これは、あなたが実行しようとしているクエリがあります無効。 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(); 
    } 
    } 
} 

小型ノート:これは変数のためにJavaで推奨命名スタイルであるため、上記のコードでは、私は、adminNoにごAdminNo変数と改名名前(「camelCase」と呼ばれます)。

+0

これは本当に素晴らしい説明です!ありがとうございました! – Ruiru

関連する問題