gpt4 book ai didi

带有连接的Java Mysql查询数据库

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:31 25 4
gpt4 key购买 nike

在此先感谢您的帮助。我正在 Eclipse 中使用 java 创建一个数据库 - 客户端应用程序。我的数据库使用 MySQL 5.6。我有一个创建和返回连接对象的方法,我将使用它来查询数据库,还有一个方法将表中的所有行作为 JSON 数组返回。尝试调用连接方法时,问题出现在查询方法中。

在:尝试{ con.getDBConnection();它告诉我 getDBConnection() 有错误;它给出的建议是将 cast 添加到“con”。

而且我无法从 main 方法中获取要编译的查询方法。

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()); 确实有效

最佳答案

在你的returnAllParts#queryReturnAllParts方法,改变

con.getDBConnection();

通过

con = getDBConnection();

问题是 con是来自 java.sql.Connection 的变量而且它没有 getDBConnection方法。由于您当前的 returnAllParts类扩展 DBConnect类,它可以访问 public Connection getDBConnection方法没有问题。

The System.out.println(con.getUser()); does work

这是因为在你的 Main#main类,你已经声明了DBConnect con .不要将此变量与 con 混淆在其他方法中声明的变量。


与问题没有直接关系,但我建议您对当前的代码/设计进行一些改进:

  • 更改您的名字 returnAllParts为对 future 的读者更有意义的东西上课(即使你在几天或几周内也会成为你代码的 future 读者)。从阅读您的代码来看,此类应该重命名为 PartList .
  • 使用数据库连接池而不是手动获取连接。有一些图书馆可以为您处理这个问题 BoneCP
  • 可能您是编程新手,所以您最好以正确的方式开始并分层开发您的应用程序(进一步阅读:Multitier architecture)。在此基础上,我们可以说 DAO(或数据服务,取决于你如何命名)应该只包含访问和检索数据的方法,其他客户端可以按照他们想要/需要的方式使用它,所以它会是最好返回 List<PartList>对象,应用程序中的另一层(可能最接近表示层)将应用从对象到 JSON 字符串的转换。
  • 从设计的角度来看,如果您的数据库访问对象使用 DBConnect更好对象而不是从它延伸。这样,您可以拥有一个 DBConnect与所有相关 DAO 关联的每个数据库连接配置的对象。

关于带有连接的Java Mysql查询数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18128244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com