Java 编码一个存储错误值的SQL数据库

Java 编码一个存储错误值的SQL数据库,java,mysql,database,codenameone,Java,Mysql,Database,Codenameone,我习惯于用Java开发桌面应用程序。现在我正在尝试代号一来开发我的第一个移动应用程序 尝试复制我使用SQL数据库的经验时,我遇到了一种非常奇怪的存储行为,我无法解释 创建了数据库,但当我更改表输入值时,新值将被忽略,只添加旧值。要保存新值,我必须删除数据库 我喜欢的界面和任何类型的帮助将不胜感激 Database db = Display.getInstance().openOrCreate("MyDB.db"); db.execute("CREATE TABLE IF NOT EXISTS

我习惯于用Java开发桌面应用程序。现在我正在尝试代号一来开发我的第一个移动应用程序

尝试复制我使用SQL数据库的经验时,我遇到了一种非常奇怪的存储行为,我无法解释

创建了数据库,但当我更改表输入值时,新值将被忽略,只添加旧值。要保存新值,我必须删除数据库

我喜欢的界面和任何类型的帮助将不胜感激

Database db = Display.getInstance().openOrCreate("MyDB.db");

db.execute("CREATE TABLE IF NOT EXISTS Persons (Date NOT NULL,Event NOT NULL)");




String sql = "INSERT INTO Persons (DATE , Event) " + "VALUES ( 'John', '10000.00' );"; 
db.execute (sql);

// adds "John" to the database every time I click the button 
// then I change the from "John" to "James"
// I am not adding the lines twice, just change the input



String sql = "INSERT INTO Persons (DATE , Event) " + "VALUES ( 'James', '10000.00' );"; 
db.execute (sql);

//keeps adding "John" to the database, even though value has been changed to "James" 




Cursor cur = db.executeQuery("select * from Persons;");
Row currentRow= cur.getRow();
String dataText = currentRow.getString(0);

while (cur.next()) {
             System.out.println(dataText);
        }

您没有在
while()
循环中将下一行提取到
dataText
中,因此您只是重复打印第一行的文本

应该是:

Cursor cur = db.executeQuery("select * from Persons;");
while (cur.next()) {
    Row currentRow = cur.getRow();
    String dataText = currentRow.getString("Date");
    System.out.println(dataText);
}
如果使用单独的查询工具(如
PhpMyAdmin
)检查该表,您应该会看到它同时包含这两行


我希望我的语法正确。我不是Java程序员,我是从一个

创建表时,必须指定表列的数据类型。在
while()
循环中,您没有更新
dataText
。列名似乎与您输入的数据不匹配
John
看起来不像是日期,为什么事件是数字?这个数字看起来更像是一个价格。巴玛,谢谢,但不起作用。在Codename One中,没有cur.getText()方法。。。它以ResultSet rs.getText()的形式存在于Java MySQL中……将其设置为
ResultSet
而不是
Cursor
。但主要的一点是,你必须在循环中得到行,而不是一次。没有结果集,但概念是相似的。在每一个循环中,你们需要做这两行<代码>行currentRow=cur.getRow()
String dataText=currentRow.getString(0)
您可能还需要添加
stringsecondColumn=currentRow.getString(1)由于表中有两列,现在我看到了,这不是标准Java,而是CodeNameOne的一部分。我找到了
Cursor
文档,其中有一个大示例,展示了正确的使用方法。