我的插入方法有什么问题? 我的表有两列,名称,艺术家和时间戳,也是 实际上,我如何将时间戳参数传递给insert语句?
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
/*FileWriter dir = new FileWriter(nameOfSong.getText()
+ ".txt");
BufferedWriter buffer = new BufferedWriter(dir);
buffer.write(nameOfSong.getText());
buffer.newLine();
buffer.write(artist.getText());
buffer.newLine();
buffer.newLine();
buffer.write(lyrics.getText());
buffer.close();
*/
Statement statement = connection.createStatement();
statement.executeUpdate("INSERT INTO lyrics1_lyrics1 VALUES(" +
nameOfSong.getText() + ", " + artist.getText() + "");
} catch (Exception z) {
System.err.println("Error: " + z.getMessage());
}
internalFrame.dispose();
}
});
)
答案 0 :(得分:6)
始终使用PreparedStatement
。
String sql="INSERT INTO lyrics1_lyrics1 VALUES (?,?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1,nameOfSong.getText());
statement.setString(2,artist.getText());
statement.executeUpdate();
statement.close();
connection.close();
答案 1 :(得分:4)
文本值需要用单引号(''
)包围。
并且SQL转义以避免SQL injection攻击,或者您第一次收到Little Bobby Tables的歌曲时,您的所有数据库都属于他。
更好的是,use a PreparedStatement
,让机器为你工作。
答案 2 :(得分:3)
您可以使用预备语句
String query = "INSERT INTO lyrics1_lyrics1(name, artist, timestamp) values(?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setString(1, name); // set input parameter 2
pstmt.setString(2, artist);
pstmt.setString(3, new TimeStamp(new Date().getTime()));
您需要为TimeStap添加import语句;
import java.sql.Timestamp;
或者使用
pstmt.setString(3, new java.sql.TimeStamp(new Date().getTime()));
您可以在java2s site中找到很多示例。
答案 3 :(得分:2)
将行更改为:
statement.executeUpdate("INSERT INTO lyrics1_lyrics1 VALUES('" +
nameOfSong.getText() + "', '" + artist.getText() + "'");
答案 4 :(得分:1)
这可能会解决您的问题:
statement.executeUpdate("INSERT INTO lyrics1_lyrics1 VALUES('" + nameOfSong.getText() + "', '" + artist.getText() + "')");`