Java新手需要数据库连接方面的帮助

iam*_*esy 4 java mysql connection-string database-connection

我是Java的新手,甚至是Java数据库连接的新手.当我把它放在Main类中时,我设法创建了一个数据库连接并查询了一个表.现在我已将它移动到一个名为Connection的新类中,我收到错误:

package lokate;

import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;

public class Connection {

private static Statement stmt = null;
private static ResultSet rs = null;
private static Connection con = null;

public Connection() throws SQLException {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        String connectionUrl = "jdbc:mysql://localhost:3306/Lokate?" +
                               "user=root&password=";
        con = DriverManager.getConnection(connectionUrl);
        stmt = con.createStatement();
        retriveData("SELECT * FROM Users");
        int rowsEffected = 0;
    } catch (SQLException sqlEx) {
        System.out.println("SQL Exception: "+ sqlEx.toString());
    } catch (ClassNotFoundException classEx) {
        System.out.println("Class Not Found Exception: "+ classEx.toString());
    } catch (Exception Ex) {
        System.out.println("Exception: "+ Ex.toString());
    }
}

public static void retriveData(String SQL) throws Exception {
    rs = stmt.executeQuery(SQL);
    while (rs.next()) 
    {
        System.out.println(rs.getString("fname") + " : " + rs.getString("lname"));
    }
}

}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,说无法找到符号.符号:方法createStatement()和con = DriveManager的无法比较的类型.....

有人可以帮忙吗?

另外,最好将连接放在这样的类中,然后每当我想用db做一些事情时调用一个新对象?

问候,

比利

duf*_*ymo 6

我会说你的代码是许多最差实践的一个例子.让我来计算一下:

  1. 您的Connection类是一个糟糕的抽象,除了java.sql.Connection之外什么都不提供.
  2. 如果你使用你的课程,你永远不会利用连接池.
  3. 您可以硬连接驱动程序类,连接URL等.如果不进行编辑和重新编译,则无法更改它.更好的解决方案是将这些东西外化.
  4. 在catch块中打印错误消息的信息远远少于提供整个堆栈跟踪的信息.
  5. 你的代码伤害了我的眼睛.它不遵循Sun Java编码标准.
  6. 你的retrieveData方法完全没用.你会对所有这些印刷的陈述做什么?将它们加载到数据结构或对象中是不是更好,所以其余代码可能会使用该信息?
  7. 它是rowsAffected- "影响"是动词,"效果"是名词.另一个没有任何好处的变量.

你走错了路.重新思考它.

我想你会发现这段代码更有帮助.

package persistence;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DatabaseUtils
{
    public static Connection createConnection(String driver, String url, String username, String password) throws ClassNotFoundException, SQLException
    {
        Class.forName(driver);

        if ((username == null) || (password == null) || (username.trim().length() == 0) || (password.trim().length() == 0))
        {
            return DriverManager.getConnection(url);
        }
        else
        {
            return DriverManager.getConnection(url, username, password);
        }
    }

    public static void close(Connection connection)
    {
        try
        {
            if (connection != null)
            {
                connection.close();
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }


    public static void close(Statement st)
    {
        try
        {
            if (st != null)
            {
                st.close();
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    public static void close(ResultSet rs)
    {
        try
        {
            if (rs != null)
            {
                rs.close();
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    public static void rollback(Connection connection)
    {
        try
        {
            if (connection != null)
            {
                connection.rollback();
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    public static List<Map<String, Object>> map(ResultSet rs) throws SQLException
    {
        List<Map<String, Object>> results = new ArrayList<Map<String, Object>>();

        try
        {
            if (rs != null)
            {
                ResultSetMetaData meta = rs.getMetaData();
                int numColumns = meta.getColumnCount();
                while (rs.next())
                {
                    Map<String, Object> row = new HashMap<String, Object>();
                    for (int i = 1; i <= numColumns; ++i)
                    {
                        String name = meta.getColumnName(i);
                        Object value = rs.getObject(i);
                        row.put(name, value);
                    }
                    results.add(row);
                }
            }
        }
        finally
        {
            close(rs);
        }

        return results;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的帮助,如果不是苛刻的回复!我发现很难在java数据库连接上找到任何有用的资料 (3认同)
  • @Jonesy:duffymo的观点都非常有效.你提到你是Java的新手,所以我建议你现在不要过于认真地看待他的评论(读消极的),尽管他提到的是你应该沿着你的学习路径采用的最佳实践. (2认同)