Exception in thread "main" java.lang.NullPointerException

Exception in thread "main" java.lang.NullPointerException,第1张

try

{

mysqlCon= DriverManager.getConnection(

mysqlURL,mysqlUser,mysqlPassword)

Statement stmt = mysqlCon.createStatement()<--------

楼主这句错了你已经声明了一个private static Statement stmt这里又重新一个对象,所以这样改用你的类已经声明的

stmt = mysqlCon.createStatement()直接把Statement删了再试试估计就可以了

if (!mysqlCon.isClosed())

System.out.println("连接数据库成功")

System.out.println("Autocommit 为" + mysqlCon.getAutoCommit())

// mysqlCon.close()

}

__________________________________________________

/ 70行 ResultSet rs = stmt.executeQuery(sql)

楼主是的你看executeQuery(sql)是stament的对象stmt调用的,不是ConnDB的对象调用的,为什么要ConnDB c= new ConnDB()因为楼主你的数据库的连接和stament的对象的初始化是用ConnDB的构造函数完成的,如果new一个ConnDB()就直接完成和数据库连接,而且你的stmt就不会是null值了

还有那个方法其实是封装stam的方法,一般是用public,你看方法里面executeQuery(sql)方法也是stament对象调用的,这样写有个好处直接ConnDB c= new ConnDB(),c.executeQuery(sql)就可以执行数据库查询了,完全不用再和stament的对象打交道,这就是一种简单工厂模式的应用,楼主多练练,以后就会体会了。

————————————————————————————

楼上的朋友第一个建议很好,但第二个回答的回答有误导之嫌,String mysqlURL= "jdbc:mysql://localhost:3306/bicel"

String mysqlUser = "root"

String mysqlPassword ="mysql"

这样声明很对,我做了项目都这样申明,这样声明有个好处你移植到别的数据库直接把对应url,mysqlUser,mysqlPassword写上去在吧驱动换一下就行了,比较清楚,也让项目的其他程序员看的很清楚,还有楼主分是你的,自己拿捏吧。

Discuz!NT多层架构

DNT.config中配置数据库连接字符串

Discuz.Data命名空间DbHelper类数据访问,

Discuz.Data命名空间IDataProvider为逻辑 *** 作接口,

使用了工厂模式对应到实际的 *** 作类中,如Discuz.Data.SqlServer、Discuz.Data.MySQL等

配置文件的序列化和反序列化,见Discuz.Config命名空间

Discuz.Common命名空间包含一些工具类,如数据校验、数据转换、字符串 *** 作等。

还有一些如缓存、web服务等

呵呵,说得有点乱

链接数据库用到JDBC,一般链接数据库都要用到数据库驱动、链接字符串、登录名、登录密码。这4个属性可以提取到一个父类中,每一种数据库写一个类继承父类。要是这些都没问题了,就可以用楼上哥们儿说的,简单工厂模式,简单工厂是用到了java中的多态特性。

import java.sql.Connection

public abstract class BaseConnect {

public BaseConnect(String driverClass, String url, String loginName,

String password) {

super()

this.driverClass = driverClass

this.url = url

this.loginName = loginName

this.password = password

}

protected String driverClass

protected String url

protected String loginName

protected String password

public abstract void initDriver()

public abstract Connection getConnect()

public abstract void closeConnect(Connection conn)

}

import java.sql.Connection

import java.sql.DriverManager

import java.sql.SQLException

public class OraclConnect extends BaseConnect {

public OraclConnect(String driverClass, String url, String loginName,

String password) {

super(driverClass, url, loginName, password)

// TODO Auto-generated constructor stub

}

@Override

public void initDriver() {

try {

Class.forName(driverClass)

} catch (ClassNotFoundException e) {

e.printStackTrace()

}

}

@Override

public Connection getConnect() {

try {

return DriverManager.getConnection(url, loginName, password)

} catch (SQLException e) {

e.printStackTrace()

}

return null

}

@Override

public void closeConnect(Connection conn) {

try {

if (conn != null &&!conn.isClosed()) {

conn.close()

}

} catch (SQLException e) {

e.printStackTrace()

}

}

}

以此类推,上面代码是我随便一写,你自己再改进下。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8594881.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存