使用Java将记录插入Oracle DB

时间:2015-07-12 02:04:08

标签: java sql oracle

我收到了一个错误的逗号错误,我似乎无法弄清楚可能导致它的原因,任何帮助都会受到赞赏。

表创建SQL:

CREATE TABLE APPOINTMENTS (APP_ID NUMBER(38) NOT NULL, I_ID NUMBER(38), DATE_TIME VARCHAR2(50), INSPECTION_TYPE VARCHAR2(30), PRICE VARCHAR2(10), HST VARCHAR2(10), TOTAL VARCHAR2(10), CLIENT_NAME VARCHAR2(40), CLIENT_NUMBER VARCHAR2(15), CLIENT_EXT VARCHAR2(10), CLIENT_EMAIL VARCHAR2(50), CLIENT_NAME2 VARCHAR2(40), CLIENT_NUMBER2 VARCHAR2(15), CLIENT_EXT2 VARCHAR2(10), CLIENT_EMAIL2 VARCHAR2(50), ADDRESS VARCHAR2(100), INTERSECTION VARCHAR2(100), CITY VARCHAR2(40), AGENT_ID NUMBER(38), REF_SOURCE VARCHAR2(30), BUILDING_TYPE VARCHAR2(30), SQUARE_FEET NUMBER(38), LIST_PRICE VARCHAR2(15), LOCKBOX VARCHAR2(40), VACANT VARCHAR2(10), NOTES VARCHAR2(255), BILL_TO VARCHAR2(20), PICTURES_REQUESTED VARCHAR2(10), FLAG VARCHAR2(10), APPROVED VARCHAR2(10), BUILDING_PREMIUM VARCHAR2(10), TRAVEL_PREMIUM VARCHAR2(10), SIZE_PREMIUM VARCHAR2(10), HOLIDAY_PREMIUM VARCHAR2(10), MISC_PREMIUM VARCHAR2(10), INSPECTOR_PAID VARCHAR2(10), COMPANY VARCHAR2(10) NOT NULL, SUGGESTED_RETAIL VARCHAR2(10), SUGGESTED_HST VARCHAR2(10), SUGGESTED_TOTAL VARCHAR2(10), PRIMARY KEY (APP_ID));

要插入和执行的Java代码:

dc.query = "INSERT INTO HR.APPOINTMENTS (APP_ID,I_ID, DATE_TIME,INSPECTION_TYPE, PRICE, HST, TOTAL, CLIENT_NAME, CLIENT_NUMBER, CLIENT_EXT, CLIENT_EMAIL,CLIENT_NAME2, "
                + "CLIENT_NUMBER2, CLIENT_EXT2, CLIENT_EMAIL2, ADDRESS, INTERSECTION, CITY, AGENT_ID, REF_SOURCE, BUILDING_TYPE, SQUARE_FEET, LIST_PRICE, LOCKBOX, VACANT,"
                + "NOTES, BILL_TO, PICTURES_REQUESTED, FLAG, APPROVED, BUILDING_PREMIUM, TRAVEL_PREMIUM, SIZE_PREMIUM, HOLIDAY_PREMIUM, MISC_PREMIUM, INSPECTOR_PAID,"
                + "COMPANY, SUGGESTED_RETAIL, SUGGESTED_HST, SUGGESTED_TOTAL)"
                + ""
                + "VALUES (" + hNum + "," + inspector + ",'" + date1 + "','" + inspectionType + "','" + price + "','" + hst + "','" + total + "','" + clientName + "','" + clientNumber + "','"
                + clientExt + "','" + clientEmail + "','" + clientName2 + "','" + clientNumber2 + "','" + clientExt2 + "','" + clientEmail2 + "','" + address + "','" + cMIntersection
                + "','" + city + "'," + hNum2 + ",'" + rSource + "','" + bType + "', 1000 ,'" + listPrice + "','" + lockbox + "','" + vacant + "','" + sInformation + "','" + billTo + "','"
                + pRequested + "','" + flagged + "', 'No', 'No', '0' , '0', '0', '0', '0', 'No','" + company + "','" + suggestedPrice + "','" + suggestedhst + "','" + suggestedTotal + "')";
        dc.rset = dc.stmt.executeQuery(dc.query);

1 个答案:

答案 0 :(得分:0)

这是一种更通用的方法。您只需要担心下面的Oracle类,并且可能为Factory方法添加一些新条目,因为我只为您定义了一对。

我还在Row类中编写了PreparedStatement的实际执行,但是我从未测试过那么远。让我知道它是否适合您(不要忘记设置您的数据库凭据和东西)...

 import java.io.IOException;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.ArrayList;
 import java.util.List;

 public class Oracle {

         public static void main(String[] args) {
                 Row row = new Row("OWNERNAME", "TABLENAME");
                 row.setDummyValues();

 // set your individual column values here as you debug ...

                 System.out.println( row.getPreparedStatement() );

 //              for(Column column : row.getColumns()) {
 //                      System.out.println("[" + column.name + "][" + column.type + "][" + column.nullable + "[" + column.value + "]");
 //              }

         }
 }

 class Column {
         int position;
         String name;
         String type;
         boolean nullable;
         Object value;

         public Column(ResultSet resultSet) throws SQLException {
                 position = resultSet.getInt("COLUMN_ID");
                 name= resultSet.getString("COLUMN_NAME");
                 type= resultSet.getString("DATA_TYPE");
                 nullable= resultSet.getBoolean("NULLABLE");
                 value = null;
         }
 }

 class DummyValueFactory {

         public static Object createDummyValue(String type, boolean nullable) {
                 Object value = null;

                 if(!nullable) {
                         if(type.contains("CHAR")) {
                                 value = "ABC";
                         }
                         else if(type.contains("NUMBER")) {
                                 value = new Integer("123");
                         }
                         else if(type.contains("TIMESTAMP")) {
                                 value = new java.sql.Timestamp(System.currentTimeMillis());
                         }
                         else {
                                 throw new RuntimeException("CANNOT BUILD A DUMMY VALUE FOR " + type);
                         }
                 }
                 return value;
         }
 }

 class Row {

         String owner;
         String table;
         List<Column> columns = new ArrayList<Column>();

         public Row(String ownerName, String tableName) {
                 owner = ownerName;
                 table = tableName;

                 Connection connection = null;
                 Statement statement = null;
                 ResultSet resultSet = null;

                 try {
                         connection = getConnection();
                         statement = connection.createStatement();
                         resultSet = statement.executeQuery(getMetaDataQuery());
                         while(resultSet.next()) {
                                 columns.add(new Column(resultSet));
                         }
                 }
                 catch (ClassNotFoundException e) {
                         e.printStackTrace();
                 }
                 catch (SQLException e) {
                         e.printStackTrace();
                 }
                 catch (IOException e) {
                         e.printStackTrace();
                 }
                 finally {
                         try {
                                 if(resultSet != null) {
                                         resultSet.close();
                                 }
                                 if(statement != null) {
                                         statement.close();
                                 }
                                 if(connection != null) {
                                     connection.close();
                                 }
                         }
                         catch (SQLException e) {
                                 statement = null;
                                 connection = null;
                         }
                 }
         }

         public void setDummyValues() {
                 for(Column column: columns) {
                         column.value = DummyValueFactory.createDummyValue(column.type, column.nullable);
                 }
         }

         public List<Column> getColumns() {
                 return columns;
         }

         public Column getColumn(String columnName) {
                 Column foundColumn = null;

                 for(Column column: columns) {
                         if(column.name.equals(columnName)) {
                                 foundColumn = column;
                                 break;
                         }
                 }
                 return foundColumn;
         }

         public boolean setColumn(String columnName, Object value) {
                 boolean result = false;
                 for(Column column: columns) {
                         if(column.name.equals(columnName)) {
                                 column.value = value;
                                 result = true;
                                 break;
                         }
                 }
                 return result;
         }

         private final String getMetaDataQuery() {
                 String SQLString =  "SELECT COLUMN_ID,\n";
                        SQLString += "       COLUMN_NAME,\n";
                        SQLString += "       DATA_TYPE,\n";
                        SQLString += "       NULLABLE\n";
                        SQLString += "FROM ALL_TAB_COLUMNS\n";
                        SQLString += "WHERE OWNER = '" + owner + "'\n";
                        SQLString += "  AND TABLE_NAME = '" + table + "'\n";
                        SQLString += "ORDER BY COLUMN_ID";

             return SQLString;
         }

         public String getPreparedStatement() {
                 int counter = 0;
                 String SQLString = "INSERT INTO " + owner + "." + table + "(\n";
             for(Column column : columns) {
                 if(counter++ > 0) {
                         SQLString += ", ";
                 }
                 SQLString += "\t" + column.name + "\n";
             }
         SQLString += ") VALUES (\n";
         counter = 0;
         for(int index = 0; index < columns.size(); index++) {
                 if(counter++ > 0) {
                         SQLString += ", ";
                 }
                 SQLString += "\t?\n";
         }
                 SQLString += ")";
                 return SQLString;
         }

         public void executeInsert() {
                 Connection connection = null;
                 PreparedStatement preparedStatement = null;

                 String SQLString = getPreparedStatement();
             try {
                         connection = getConnection();
                         preparedStatement = connection.prepareStatement(SQLString);
                         for(int index = 0; index < columns.size(); index++) {
                             preparedStatement.setObject(index, columns.get(index).value);
                         }
                         preparedStatement.executeUpdate();
                 }
             catch (SQLException e) {
                         e.printStackTrace();
                 }
             catch (ClassNotFoundException e) {
                         e.printStackTrace();
                 }
             catch (IOException e) {
                         e.printStackTrace();
                 }
             finally {
                 try {
                     if(preparedStatement != null) {
                                         preparedStatement.close();
                                 }
                     if(connection != null) {
                                         connection.close();
                                 }
                 }
                 catch (SQLException e) {
                                 preparedStatement = null;
                                 connection = null;
                 }
             }
         }

         private static final Connection getConnection() throws ClassNotFoundException, SQLException, IOException {
                 String user = "username";
                 String password = "password";
                 String server = "server";
                 int port = 1234;
                 String sid = "database";

                 Connection connection = null;
                 String url = "jdbc:oracle:thin:@" + server + ":" + port + ":" + sid;
                 Class.forName("oracle.jdbc.driver.OracleDriver");
                 java.util.Properties info = new java.util.Properties();
                 info.put ("user", user);
                 info.put ("password", password);
                 info.put ("useFetchSizeWithLongColumn", "true");
                 connection = DriverManager.getConnection(url, info);
                 return connection;
         }
 }
相关问题