java 数据表_Java-写入数据库表

在尝试将数据写入数据库的Item和Supplier表时遇到问题。代码中定义了用于连接和执行SQL语句的DataBaseHandler类,但在写入记录时返回-1,提示无法写入数据库。错误堆栈跟踪显示NullPointerException。解决方案包括打印堆栈跟踪以定位问题,以及考虑使用PreparedStatement代替直接SQL插入以防止SQL注入。
摘要由CSDN通过智能技术生成

我试图将新记录写入两个称为项目和供应商的数据库表.

我有一个处理数据库连接和SQL语句的类.我在名为ItemEntryScreen的类中使用大型表格,在其中使用以下内容:

private void writeItemRecord()

{

if ( DataBaseHandler.makeConnectionTofireplaceDB() == -1)

{

JOptionPane.showMessageDialog (frame, "Unable to connect to database table (Item)");

}

else // Ok, so first read data from the text fields

{

// Read data from form and store data

String suppliercode = suppliercodeTxtField.getText();

String suppliername = suppliernameTxtField.getText();

String address = addressTxtField.getText();

// Create a Item oject

Item item = new Item();

// Set the attributes for the Item object

item.setSuppliercode(suppliercode);

item.setSuppliername(suppliername);

item.setAddress(address);

// Write Item record. Method writeToItemTable() returns

// 0 of OK writing record, -1 if there is a problem. I store

// the returned value in a variable called error.

int error = DataBaseHandler.writeTosupplierTable(item.getSuppliercode(),item.getSuppliername(),item.getAddress());

// Check if there is a problem writing the record, in

// which case error will contain -1

if (error == -1)

{

JOptionPane.showMessageDialog (frame, "Problem writing record to Item Table");

}

// Clear the form - actual method is coded below

clearForm();

// Close database connection. Report an error message

// if there is a problem.

if ( DataBaseHandler.closeConnection() == -1 )

{

JOptionPane.showMessageDialog (frame, "Problem closing data base conection");

}

}

}

/**

* Method to write a Item record

*/

private void writesupplierRecord()

{

// Check to see if we can connect to database table

if ( DataBaseHandler.makeConnectionTofireplaceDB() == -1)

{

JOptionPane.showMessageDialog (frame, "Unable to connect to database table (Item)");

}

else // Ok, so first read data from the text fields

{

// Read data from form and store data

String itemname = itemnameTxtField.getText();

String itemcode = itemcodeTxtField.getText();

String description = descriptionTxtField.getText();

String unitprice = unitpriceTxtField.getText();

String style = styleTxtField.getText();

String finish = finishTxtField.getText();

String stock = stockTxtField.getText();

// Convert priceStr to a float

Float fvar = Float.valueOf(unitprice);

float newprice = fvar.floatValue();

Float svar = Float.valueOf(stock);

float newstock = svar.floatValue();

// Create a Item oject

Item item = new Item();

// Set the attributes for the Item object

item.setItemname (itemname);

item.setItemcode (itemcode);

item.setDescription (description);

item.setUnitprice (newprice);

item.setStock(newstock);

item.setStyle(style);

item.setFinish(finish);

// Write Item record. Method writeToItemTable() returns

// 0 of OK writing record, -1 if there is a problem. I store

// the returned value in a variable called error.

int error = DataBaseHandler.writeToitemTable(item.getItemname(),

item.getItemcode(),

item.getDescription(),

item.getUnitprice(),

item.getStock(),

item.getStyle(),

item.getFinish()

);

// Check if there is a problem writing the record, in

// which case error will contain -1

if (error == -1)

{

JOptionPane.showMessageDialog (frame, "Problem writing record to Item Table");

}

// Clear the form - actual method is coded below

clearForm();

// Close database connection. Report an error message

// if there is a problem.

if ( DataBaseHandler.closeConnection() == -1 )

{

JOptionPane.showMessageDialog (frame, "Problem closing data base conection");

}

}

} // End

上面的代码编译!

static public int writeToitemTable(String itemnameIn, String itemcodeIn, String descriptionIn,

float unitpriceIn, float stockIn, String styleIn, String finishIn)

{

// Variable to hold the SQL query

String SQLString;

// Build a string containing the SQL INSERT instruction to be used later

SQLString = "INSERT INTO item VALUES ('" + itemcodeIn + "','" + itemnameIn + "','" + descriptionIn + "','" + unitpriceIn + "','"

+ stockIn + "','" + styleIn + "','" + finishIn + "')";

try

{

// The createStatement() method creates a Statement object. Object will be

// attached to my reference variable (statement) defined at the top of class.

statement = connectionTofireplaceDB.createStatement();

// The executeUpdate() statement can be used here to execute an

// SQL INSERT instruction.

statement.executeUpdate (SQLString);

}

catch (SQLException exception)

{

return (-1); // Return -1 if problem writing record to file

}

return (0); // Return with 0 if record successfully written

} // End

static public int writeTosupplierTable(String suppliernameIn, String suppliercodeIn, String addressIn)

{

// Variable to hold the SQL query

String SQLString;

// Build a string containing the SQL INSERT instruction to be used later

SQLString = "INSERT INTO supplier VALUES ('" + suppliernameIn + "','" + suppliercodeIn + "','" + addressIn + "')";

try

{

// The createStatement() method creates a Statement object. Object will be

// attached to my reference variable (statement) defined at the top of class.

statement = connectionTofireplaceDB.createStatement();

// The executeUpdate() statement can be used here to execute an

// SQL INSERT instruction.

statement.executeUpdate (SQLString);

}

catch (SQLException exception)

{

return (-1); // Return -1 if problem writing record to file

}

return (0); // Return with 0 if record successfully written

} // End

当我在表单中输入详细信息并单击提交按钮时,我得到的返回值为-1,这导致显示一个消息框,指出写入数据库存在问题.为什么?

更新资料

这些是我可以获得的错误消息:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

at ItemEntryScreen.writeItemRecord(ItemEntryScreen.java:392)

at ItemEntryScreen.actionPerformed(ItemEntryScreen.java:348)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)

at java.awt.Component.processMouseEvent(Component.java:6038)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)

at java.awt.Component.processEvent(Component.java:5803)

at java.awt.Container.processEvent(Container.java:2058)

at java.awt.Component.dispatchEventImpl(Component.java:4410)

at java.awt.Container.dispatchEventImpl(Container.java:2116)

at java.awt.Component.dispatchEvent(Component.java:4240)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)

at java.awt.Container.dispatchEventImpl(Container.java:2102)

at java.awt.Window.dispatchEventImpl(Window.java:2429)

at java.awt.Component.dispatchEvent(Component.java:4240)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

解决方法:

首先,打印stacktrace以查找错误.

其次,我已经看到人们由于“声明”而遇到这些麻烦.在要更改值的地方使用“ PreparedStatement”.如果您执行第二个建议,则很可能会解决您的问题

第三,使用finally()块或其他方法关闭连接

标签:file-io,sql,java,database

来源: https://codeday.me/bug/20191201/2079887.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值