带连接的javamysql查询数据库
提前感谢您的帮助。我正在Eclipse中使用java创建一个数据库客户端应用程序。我的数据库使用MySQL 5.6。我有一个方法来创建并返回一个连接对象,用于查询数据库,还有一个方法可以将表中的所有行作为JSON数组返回。当尝试调用连接方法时,查询方法出现了问题 在:试试看{ con.getDBConnection(); 它告诉我getDBConnection()有一个错误;它给出的建议是将cast添加到“con” 我无法从main方法获得要编译的查询方法带连接的javamysql查询数据库,java,mysql,database,jdbc,connection,Java,Mysql,Database,Jdbc,Connection,提前感谢您的帮助。我正在Eclipse中使用java创建一个数据库客户端应用程序。我的数据库使用MySQL 5.6。我有一个方法来创建并返回一个连接对象,用于查询数据库,还有一个方法可以将表中的所有行作为JSON数组返回。当尝试调用连接方法时,查询方法出现了问题 在:试试看{ con.getDBConnection(); 它告诉我getDBConnection()有一个错误;它给出的建议是将cast添加到“con” 我无法从main方法获得要编译的查询方法 package binaparts.d
package binaparts.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.*;
import org.json.JSONArray;
import binaparts.util.ToJSON;
public class returnAllParts extends DBConnect{
public JSONArray queryReturnAllParts() throws Exception{
PreparedStatement query = null;
Connection con = null;
ToJSON converter = new ToJSON();
JSONArray json = new JSONArray();
try{
con.getDBConnection();
query = con.prepareStatement("SELECT * " + "from `parts list`" );
ResultSet rs = query.executeQuery();
json = converter.toJSONArray(rs);
query.close();
}catch(SQLException SQLex){
SQLex.printStackTrace();
}catch(Exception ex){
ex.printStackTrace();
}finally{
if(con != null){
con.close();
}
}
return json;
}
}
dao包代码如下:
package binaparts.dao;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import com.mysql.jdbc.PreparedStatement;
public class DBConnect {
private Statement st = null;
private ResultSet rs = null;
private Connection con = null;
private PreparedStatement pst = null;
private String serverName = "localhost";
private String portNumber = "3306";
private String dbms = "mysql";
private Object userName = "dwilson";
private Object password = "abc";
public Connection getDBConnection() throws SQLException {
Properties connectionProps = new Properties();
connectionProps.put("user", this.userName);
connectionProps.put("password", this.password);
try{
con = DriverManager.getConnection("jdbc:" + this.dbms + "://" + this.serverName + ":" + this.portNumber + "/", connectionProps);
}catch(Exception ex){
ex.printStackTrace();
con = null;
}finally{
if(con != null){
System.out.println("Connected to database");
}
}
return con;
}
public String getUser(){
try{
DatabaseMetaData dmd = con.getMetaData();
String username = dmd.getUserName();
//System.out.println("Current User: "+username);
return username;
}catch(Exception ex){
System.out.println(ex);
ex.printStackTrace();
return null;
}
}
}
主要方法如下:
public class Main{
public static void main(String[] args){
DBConnect con = new DBConnect();
try {
con.getDBConnection();
System.out.println(con.getUser());
System.out.println(con.queryReturnAllParts());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//Login loginGUI = new Login();
//MainFrames m = new MainFrames();
//m.displayGUI();
}
}
System.out.println(con.getUser());
在此代码中确实起作用
PreparedStatement query = null;
Connection con ;
ToJSON converter = new ToJSON();
JSONArray json = new JSONArray();
try{
con.getDBConnection();
变量con
的类型是java.sql.Connection
,而不是DBConnect
。该类型没有getDBConnection()
方法。我相信您的意思是使用
con = this.getDBConnection();
在第一个returnAllParts
类中(扩展了DBConnect
)(请使用Java命名约定。)在此代码中
PreparedStatement query = null;
Connection con ;
ToJSON converter = new ToJSON();
JSONArray json = new JSONArray();
try{
con.getDBConnection();
变量con
的类型是java.sql.Connection
,而不是DBConnect
。该类型没有getDBConnection()
方法。我相信您的意思是使用
con = this.getDBConnection();
在第一个
returnAllParts
类(扩展了DBConnect
)(请使用Java命名约定。)在returnAllParts\queryReturnAllParts
方法中,更改
con.getDBConnection();
借
问题是con
是java.sql.Connection
中的一个变量,它没有getDBConnection
方法。由于当前的returnAllParts
类扩展了DBConnect
类,因此它可以毫无问题地访问公共连接getDBConnection
方法
System.out.println(con.getUser());可以正常工作
这是因为在Main#Main
类中,您已经声明了DBConnect con
。请不要将此变量与在其他方法中声明的con
变量混淆
与问题没有直接关系,但我建议您对当前代码/设计进行一些改进:
- 更改
类的名称,以获得对未来读者更有意义的内容(即使您在几天或几周后也将成为代码的未来读者)。从阅读代码来看,该类似乎应该重命名为returnAllParts
PartList
- 使用数据库连接池而不是手动获取连接。有一些库可以为您的同类处理此问题
- 可能您是编程新手,因此最好从正确的方式开始,分层开发应用程序(进一步阅读:)。在此基础上,我们可以说DAO(或数据服务,取决于您如何命名)应该只包含访问和检索数据的方法,其他客户端可以按照他们想要/需要的方式使用数据,因此最好返回
对象,并且应用程序中的另一层(可能是最接近表示的层)将对象转换为JSON字符串列表
- 从设计角度来看,如果您的数据库访问对象使用
对象而不是从其扩展,则会更好。这样,每个数据库连接配置可以有一个与所有相关DAO关联的DBConnect
对象DBConnect
returnAllParts\queryReturnAllParts
方法中,更改
con.getDBConnection();
借
问题是con
是java.sql.Connection
中的一个变量,它没有getDBConnection
方法。由于当前的returnAllParts
类扩展了DBConnect
类,因此它可以毫无问题地访问公共连接getDBConnection
方法
System.out.println(con.getUser());可以正常工作
这是因为在Main#Main
类中,您已经声明了DBConnect con
。请不要将此变量与在其他方法中声明的con
变量混淆
与问题没有直接关系,但我建议您对当前代码/设计进行一些改进:
- 更改
类的名称,以获得对未来读者更有意义的内容(即使您在几天或几周后也将成为代码的未来读者)。从阅读代码来看,该类似乎应该重命名为returnAllParts
PartList
- 使用数据库连接池而不是手动获取连接。有一些库可以为您的同类处理此问题
- 可能您是编程新手,因此最好从正确的方式开始,分层开发应用程序(进一步阅读:)。在此基础上,我们可以说DAO(或数据服务,取决于您如何命名)应该只包含访问和检索数据的方法,其他客户端可以按照他们想要/需要的方式使用数据,因此最好返回
对象,并且应用程序中的另一层(可能是最接近表示的层)将对象转换为JSON字符串列表
- 从设计角度来看,如果您的数据库访问对象使用
对象而不是从其扩展,则会更好。这样,每个数据库连接配置可以有一个与所有相关DAO关联的DBConnect
对象DBConnect