CRUD アプリをコーディングしていて、テキスト ボックスの入力をデータベースに入力したいのですが、例外が発生します。
これが私の方法です:
public void create(Produkt p) {
if(p==null) {
log.error("Erstellen von null-Objekt in DB nicht möglich");
throw new IllegalArgumentException("Erstellen von null-Objekten in der DB nicht möglich");
}
if(p.getName().length()>30) {
log.error("Produktname zu lang!");
}
PreparedStatement ps=null;
try {
ps = hsqlmanager.getConnection().prepareStatement("INSERT INTO Produkt(name, kategorie, geloescht, haltbar, preis, altersfreigabe, bild) VALUES(?, ?, ?, ?, ?, ?, ?);");
} catch (SQLException e1) {
log.error("Es konnte keine Verbindung hergestellt werden im DAOProdukt!");
e1.printStackTrace();
}
try {
//TODO
ps.setString(1, p.getName());
ps.setString(2, p.getKategorie());
ps.setBoolean(3, p.isGeloescht());
ps.setBoolean(4, p.isHaltbar());
ps.setDouble(5, p.getPreis());
ps.setBoolean(6, p.isAltersfreigabe());
ps.setString(7, p.getBild());
System.out.println(p.getName() + p.getKategorie() + p.getPreis() + p.getBild() + p.isGeloescht() + p.isGeloescht() + p.isHaltbar());
ps.execute();//here I get the Exception
ps.close();
log.info("Produkt in DB erstellt.");
}
catch (SQLException e) {
log.error("createtes Produkt konnte nicht gespeicher werden - SQLFehler: " + e.toString());
e.printStackTrace();
}
}
テキストボックスに入力する場所は次のとおりです。
String name=textBoxes.get(0).getText();
if(name.trim().isEmpty()) {
name="NO NAME ADDED!";
} else{
name = textBoxes.get(0).getText();
}
例外は次のように言っているので、名前に関係していると思います:
Java.sql.SQLDataException: data exception: string data, right truncation at org.hsqldb.jdbc.Util.sqlException(Unknown Source) at org.hsqldb.jdbc.Util.sqlException(Unknown Source) at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source) at org.hsqldb.jdbc.JDBCPreparedStatement.execute(Unknown Source) at dao.DAOProdukt.create(DAOProdukt.java:50) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown
ソース) java.awt.Component.processMouseEvent(ソース不明) javax.swing.JComponent.processMouseEvent(ソース不明) java.awt.Component.processEvent(ソース不明) java.awt.Container.processEvent(ソース不明) java.awt.Component.dispatchEventImpl(不明なソース)で java.awt.Container.dispatchEventImpl(不明なソース)で java.awt.Component.dispatchEvent(不明なソース)で java.awt.LightweightDispatcher.retargetMouseEvent(不明なソース)で.awt.LightweightDispatcher.processMouseEvent(不明なソース) java.awt.LightweightDispatcher.dispatchEvent(不明なソース) で java.awt.Container.dispatchEventImpl(不明なソース) java.awt.Window.dispatchEventImpl(不明なソース) で java.awt 。成分。java.awt.EventQueue.access$200 での dispatchEvent(不明なソース) java.awt.EventQueue.dispatchEventImpl(不明なソース) java.awt.EventQueue$3 での(不明なソース) java.awt.EventQueue$3 での実行(不明なソース) java.security.AccessController.doPrivileged (ネイティブ メソッド) での .run (未知のソース) java.security.ProtectionDomain$1.doIntersectionPrivilege (未知のソース) での java.security.ProtectionDomain$1.doIntersectionPrivilege (未知のソース) での java.awt.EventQueue java.awt.EventQueue で $4.run(未知のソース) $4.run(未知のソース) java.security.AccessController.doPrivileged(ネイティブ メソッド) で java.security.ProtectionDomain$1.doIntersectionPrivilege(未知のソース) で java.awt. java.awt の EventQueue.dispatchEvent(不明なソース)。java.awt.EventDispatchThread.pumpEventsForFilter(不明なソース) の java.awt.EventDispatchThread.pumpEventsForHierarchy(不明なソース) の EventDispatchThread.pumpOneEventForFilters(不明なソース) java.awt.EventDispatchThread の java.awt.EventDispatchThread.pumpEvents(不明なソース)。 java.awt.EventDispatchThread.run(不明なソース) での pumpEvents(不明なソース)
それで、それはどういう意味ですか?例外ps.execute();
は正しいタイプを使用していますか? なんで?