Java 通过构造函数查询数据库
我真的希望任何人能帮我解决这个问题。从昨天起我就一直在做这件事 看,我正在尝试创建一个数据库查询类,我可以尽可能多次重复使用它,而无需每隔一段时间在需要搜索或显示数据库中的项目时编写查询 我希望能够通过构造函数传递查询规范 但是,我发现以下错误:Java 通过构造函数查询数据库,java,sql,Java,Sql,我真的希望任何人能帮我解决这个问题。从昨天起我就一直在做这件事 看,我正在尝试创建一个数据库查询类,我可以尽可能多次重复使用它,而无需每隔一段时间在需要搜索或显示数据库中的项目时编写查询 我希望能够通过构造函数传递查询规范 但是,我发现以下错误: run: Connecting to a selected database... Connected database successfully... Creating statement... org.h2.jdbc.JdbcSQLExceptio
run:
Connecting to a selected database...
Connected database successfully...
Creating statement...
org.h2.jdbc.JdbcSQLException: Data conversion error converting ; SQL statement:
这是我目前的代码:
import java.sql.*;
public class RsToAList {
private final String table;
private final String columns;
private final String whereColumn;
private final String equalsEntry;
public RsToAList (String columns, String table, String whereColumn, String equalsEntry) {
this.table = table;
this.columns = columns;
this.whereColumn = whereColumn;
this.equalsEntry = equalsEntry;
}
// JDBC driver name and database URL
static String JDBC_DRIVER = "org.h2.Driver";
static String DB_URL = "jdbc:h2:file:C:/tryDb/tryDb";
// Database credentials
static String USER = "sa";
static String PASS = "";
public static void main (String[] args) {
RsToAList tryAndGet = new RsToAList("fullNames", "CLIENT", "postOfficeBoxNumber", "6448");
tryAndGet.ourQueryMethod();
}
public void ourQueryMethod () {
Connection conn = null;
Statement stmt = null;
try {
// STEP 2: Register JDBC driver
Class.forName(getJDBC_DRIVER());
// STEP 3: Open a connection
System.out.println("Connecting to a selected database...");
conn = DriverManager.getConnection(getDB_URL(), getUSER(), getPASS());
System.out.println("Connected database successfully...");
// STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql = "SELECT " + (columns) + " FROM " + (table) + " WHERE "+ (whereColumn) +" = "+ (equalsEntry) +"";
ResultSet rs = stmt.executeQuery(sql);
//STEP 5: Extract data from result set
while (rs.next()) {
// Retrieve by column name
String first = rs.getString(columns);
// Display values
System.out.print("ID: " + first);
}
rs.close();
} catch (SQLException se) {
// Handle errors for JDBC
se.printStackTrace();
} catch (Exception e) {
// Handle errors for Class.forName
e.printStackTrace();
} finally {
// finally block used to close resources
try {
if (stmt != null)
conn.close();
} catch (SQLException se) {
} // do nothing
try {
if (conn != null)
conn.close();
} catch (SQLException se) {
se.printStackTrace();
} // end finally try
} // end try
System.out.println("Goodbye!");
} // end main
/**
* @return the JDBC_DRIVER
*/
public static String getJDBC_DRIVER() {
return JDBC_DRIVER;
}
/**
* @param aJDBC_DRIVER the JDBC_DRIVER to set
*/
public static void setJDBC_DRIVER(String aJDBC_DRIVER) {
JDBC_DRIVER = aJDBC_DRIVER;
}
/**
* @return the DB_URL
*/
public static String getDB_URL() {
return DB_URL;
}
/**
* @param aDB_URL the DB_URL to set
*/
public static void setDB_URL(String aDB_URL) {
DB_URL = aDB_URL;
}
/**
* @return the USER
*/
public static String getUSER() {
return USER;
}
/**
* @param aUSER the USER to set
*/
public static void setUSER(String aUSER) {
USER = aUSER;
}
/**
* @return the PASS
*/
public static String getPASS() {
return PASS;
}
/**
* @param aPASS the PASS to set
*/
public static void setPASS(String aPASS) {
PASS = aPASS;
}
}
我是一名JAVA/编程新手,我正在努力自学如何在家编写代码,以防我的问题太简单,或者我似乎忽略了代码中的某些内容
编辑:
我不确定这是否可以帮助您,但这是创建数据库表的类:
//STEP 1. Import required packages
import java.sql.*;
public class JDBCExampleCreateTables {
// JDBC driver name and database URL
private static String JDBC_DRIVER = "org.h2.Driver";
private static String DB_URL = "jdbc:h2:file:C:/tryDb/tryDb";
// Database credentials
private static String USER = "sa";
private static String PASS = "";
public static void main (String[] args) {
Connection conn = null;
Statement stmt = null;
try {
//STEP 2: Register JDBC driver
Class.forName(JDBC_DRIVER);
//STEP 3: Open a connection
System.out.println("Connecting to a selected database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
System.out.println("Connected database successfully...");
//STEP 4: Execute a query
System.out.println("Creating table in given database...");
stmt = conn.createStatement();
String sql = "CREATE TABLE CLIENT " +
"(ID INT UNSIGNED NOT NULL AUTO_INCREMENT, " +
" fullNames VARCHAR(255), " +
" iDNumber VARCHAR(255), " +
" pINNumber VARCHAR(255), " +
" passportNumber VARCHAR(255), " +
" postOfficeBoxNumber VARCHAR(255), " +
" postalCode VARCHAR(255), " +
" telephoneNumberLandline VARCHAR(255), " +
" telephoneNumberMobile VARCHAR(255)) ";
stmt.executeUpdate(sql);
System.out.println("Created table in given database...");
} catch (SQLException se) {
//Handle errors for JDBC
se.printStackTrace();
} catch (Exception e) {
// Handle errors for Class.forName
e.printStackTrace();
} finally {
// finally block used to close resources
try {
if (stmt!=null)
conn.close();
} catch(SQLException se) {
} // do nothing
try {
if (conn!=null)
conn.close();
} catch (SQLException se) {
se.printStackTrace();
} // end finally try
} // end try
System.out.println("Goodbye!");
} // end main
} // end
sql语句中似乎有错误。请确保要比较的数据类型是兼容的。PreparedStatement很方便,而不是串联查询
PreparedStatement stm = conn.prepareStatement("select * from person where name=?");
stm.setString(1,"ABC");
ResultSet rs= stm.executeQuery();
sql语句中似乎有错误。请确保要比较的数据类型是兼容的。PreparedStatement很方便,而不是串联查询
PreparedStatement stm = conn.prepareStatement("select * from person where name=?");
stm.setString(1,"ABC");
ResultSet rs= stm.executeQuery();
尽管您尚未共享where条件的列类型。但最有可能的是,您可能会将字符串值传递给where子句,但不会将其括在单引号中:
String sql = "SELECT " + (columns) + " FROM " + (table) + " WHERE "+ (whereColumn) +" = "+ (equalsEntry) +"";
将其更改为:
String sql = "SELECT " + (columns) + " FROM " + (table) + " WHERE "+ (whereColumn) +" ='"+ (equalsEntry) +"'";
另一个潜在的缺陷候选是以下陈述:
String first = rs.getString(columns);
如果您的任何列类型不是
VARCHAR
,则可能会引发错误,尽管您尚未共享where条件的列类型。但最有可能的是,您可能会将字符串值传递给where子句,但不会将其括在单引号中:
String sql = "SELECT " + (columns) + " FROM " + (table) + " WHERE "+ (whereColumn) +" = "+ (equalsEntry) +"";
将其更改为:
String sql = "SELECT " + (columns) + " FROM " + (table) + " WHERE "+ (whereColumn) +" ='"+ (equalsEntry) +"'";
另一个潜在的缺陷候选是以下陈述:
String first = rs.getString(columns);
如果您的任何列类型不是
VARCHAR
是postOfficeBoxNumber
列aint
或VARCHAR
类型,则可能会引发错误?它是VARCHAR类型。我还编辑了我的问题,以包括创建表的类。希望有帮助。感谢您查看我的问题并提问。postOfficeBoxNumber
列是int
还是varchar
类型?它是varchar类型。我还编辑了我的问题,以包括创建表的类。希望有帮助。谢谢你看我的问题,请先留言,然后投反对票。谢谢您的批评。@user2718587您确定select查询中的equalsEntry包含单引号吗?对此感到抱歉。你的解决方案成功了。非常感谢。@user2718587很高兴它起作用了。如果我的答案对你有帮助,请点击我答案左边的勾号接受。接受一个答案有助于其他人面对同样的问题。我想我会的,但我仍然无法让循环工作。我想我已经做完了,但是如果你帮得不多的话,我不介意。请先留下评论,然后投反对票。谢谢您的批评。@user2718587您确定select查询中的equalsEntry包含单引号吗?对此感到抱歉。你的解决方案成功了。非常感谢。@user2718587很高兴它起作用了。如果我的答案对你有帮助,请点击我答案左边的勾号接受。接受一个答案有助于其他人面对同样的问题。我想我会的,但我仍然无法让循环工作。我想我已经做完了,不过如果你帮得不多的话,我也不介意。谢谢你的回复。谢谢你的回复。