我收到了一个错误的逗号错误,我似乎无法弄清楚可能导致它的原因,任何帮助都会受到赞赏。
表创建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);
答案 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;
}
}