conn.createStatement() 这个东西不太明白,求解答

zychere 2012-06-12 02:21:05
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.Statement ;
public class InsertDemo01{
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
// MySQL数据库的连接用户名
public static final String DBUSER = "root" ;
// MySQL数据库的连接密码
public static final String DBPASS = "mysqladmin" ;
public static void main(String args[]) throws Exception { // 所有的异常抛出
Connection conn = null ; // 数据库连接
Statement stmt = null ; // 数据库操作
Class.forName(DBDRIVER) ; // 加载驱动程序
String sql = "INSERT INTO user(name,password,age,sex,birthday) "+
" VALUES ('李兴华','www.mldn.cn',30,'男','2008-08-27')" ;
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
stmt = conn.createStatement() ; // 实例化Statement对象
stmt.executeUpdate(sql) ; // 执行数据库更新操作
stmt.close() ; // 关闭操作
conn.close() ; // 数据库关闭
}
};


这里面为什么要用“conn”和“createStatement()”怎么会联系到一起?不明白,求解答,谢谢
...全文
31403 17 打赏 收藏 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
小新s23 2014-03-31
  • 打赏
  • 举报
回复
我也是这样想的,stmt实际上是一个实例化的对象,后面的conn.createStatement();是一个conn对象拥有的方法。因为conn对象含盖了与数据库连接的方法,所以是需要用这个conn对象中的方法来创建stmt对象的。 流程大致是对象方法(DriverManager.getConnection(DBURL,DBUSER,DBPASS);conn.createStatement();)创建新对象(conn;stmt;),即接口中的覆盖思想,用覆盖的方式实现接口。 可是发现这样想也有解释不了的地方,要实例化接口不是应该覆盖接口中的所有方法么,并且其中没有implements关键词。 还有一个地方就是stmt.executeUpdate(sql) ,stmt只是用的conn.createStatement();对象方法来创建,哪来的executeUpdate(***);方法呢?希望有高手指点一下,这样想是对的么?
穆侠 2012-06-14
  • 打赏
  • 举报
回复 10
其实我也是个菜鸟,不过我还是想说几句:
连mysql ,是一系列的过程,这个过程有诸多对象参与:
首先要有database的驱动,Class.forName(DBDRIVER) ;这里已经注册驱动了;

有了驱动 就可以连接数据库了,这个连接当然与驱动关系密切,其实我们是“问”驱动要连接的conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;

连接上数据库后,就要对数据库进行操作。连接这个对象不应该负责操作这一块啊,所谓不在其位不谋其政,但我们要对数据库进行操作,也必须经过连接之后才能将命令下达到数据库。于是我们向连接申请了一个操作对象:stmt = conn.createStatement() ;

你的一切操作都经过操作对象传达给 数据库 服务器。

这样说吧,大明统治全国,成祖(你)要向广西下道圣旨,首先广西要归附大明(注册了,朝廷就有专门管地方政权的部门 DriverManager ,广西就成为了一个可用的服务器);其次大明要与广西取得联系,有关部门于是修了驿站(connection);当时没无线电这种方便快捷的载体,只能用马(Statement)传递圣旨,这马不是路边的,是驿站的;于是永乐帝(你)就可以下圣旨了
故先注册驱动,再向驱动索取连接,再向连接取操作,最后给操作一条命令让它执行//statement有陈述的意思。你可以认为它是一个向服务器表达你命令的对象

演讲完毕,谢谢。其实我应该放你,没你的提问谁去想这问题啊
sffx123 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
哦。。我是新手,再弱弱的问下,生成对象不是要用new关键字么?

引用 4 楼 的回复:
是调用这个方法啊
然后可以生成一个Statement对象
然后这个对象可以执行sql语句
查询用executeQuery,返回一个Resultset结果集
更新用executeUpdate,返回一个整数,即受影响行数
[/Quote]生成对象可以用new,但是你可以把new这个过程外面封装一个方法来实现。
zychere 2012-06-13
  • 打赏
  • 举报
回复
明白了,createStatement是connection接口的方法,就是用来创建statement对象用的[Quote=引用 13 楼 的回复:]
引用 11 楼 的回复:
引用 9 楼 的回复:
受教。。多谢,我只是想知道如果用“Statement stmt= new Statement()”这种方式可以么?

引用 8 楼 的回复:
有的时候 也许可能别人怎么跟你讲解你都不懂
但是没关系 不懂的地方记一下
用的多了 自然就懂了
还有 数据库操作都那几步
工作中 没人管你懂不懂 你只要会用 能给他实现就行了
不可行,St……
[/Quote]
zychere 2012-06-13
  • 打赏
  • 举报
回复
哦。。我是新手,再弱弱的问下,生成对象不是要用new关键字么?
[Quote=引用 4 楼 的回复:]
是调用这个方法啊
然后可以生成一个Statement对象
然后这个对象可以执行sql语句
查询用executeQuery,返回一个Resultset结果集
更新用executeUpdate,返回一个整数,即受影响行数
[/Quote]
猴子滴救兵 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
引用 9 楼 的回复:
受教。。多谢,我只是想知道如果用“Statement stmt= new Statement()”这种方式可以么?

引用 8 楼 的回复:
有的时候 也许可能别人怎么跟你讲解你都不懂
但是没关系 不懂的地方记一下
用的多了 自然就懂了
还有 数据库操作都那几步
工作中 没人管你懂不懂 你只要会用 能给他实现就行了
不可行,Statement只是一个接口,……
[/Quote]

这个地方我不是说实现。。
我的意思是 楼主只要能把上级交代的任务做出来就行,不是让他具体实现。。
我不知道别的公司是什么样
我们公司就是那种,把任务交给你,不管你用什么方法,你能把任务做出来就完事

10楼正解 +1
myownluckystar 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
引用 9 楼 的回复:
受教。。多谢,我只是想知道如果用“Statement stmt= new Statement()”这种方式可以么?

引用 8 楼 的回复:
有的时候 也许可能别人怎么跟你讲解你都不懂
但是没关系 不懂的地方记一下
用的多了 自然就懂了
还有 数据库操作都那几步
工作中 没人管你懂不懂 你只要会用 能给他实现就行了
不可行,Statement只是一个接口,……
[/Quote]
是的,必须通过数获得据库连接的对象conn 调用createStatement方法来创建Statement对象
dw_java08 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

1、加载数据库驱动(Class.forName(DBDRIVER) ; // 加载驱动程序)。
2、建立数据库连接池(conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;)。
3、由当前数据库连接生成一个数据操作对象(stmt = conn.createStatement() ; )。
4、用这个数据操作对象进行数据库操作……
[/Quote]
正解
sffx123 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
受教。。多谢,我只是想知道如果用“Statement stmt= new Statement()”这种方式可以么?

引用 8 楼 的回复:
有的时候 也许可能别人怎么跟你讲解你都不懂
但是没关系 不懂的地方记一下
用的多了 自然就懂了
还有 数据库操作都那几步
工作中 没人管你懂不懂 你只要会用 能给他实现就行了
[/Quote]不可行,Statement只是一个接口,没有具体实现,必须通过conn.createStatement() ;来创建具体对象。
itherael 2012-06-13
  • 打赏
  • 举报
回复 1
1、加载数据库驱动(Class.forName(DBDRIVER) ; // 加载驱动程序)。
2、建立数据库连接池(conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;)。
3、由当前数据库连接生成一个数据操作对象(stmt = conn.createStatement() ; )。
4、用这个数据操作对象进行数据库操作(stmt.executeUpdate(sql) ; // 执行数据库更新操作)。
5、关闭数据操作对象(stmt.close() ;)。
6、关闭数据连接(conn.close() ; )。

个人愚见:由于当前数据库操作对象是根据当前数据库连接来生成,每一个连接生成的对象是由当前连接来决定的。使用"NEW"的方式创建的对象跟当前连接没有关系,所以系统不知道该为这个对象使用哪一个数据库连接,造成多用户使用时产生错乱。

zychere 2012-06-13
  • 打赏
  • 举报
回复
受教。。多谢,我只是想知道如果用“Statement stmt= new Statement()”这种方式可以么?[Quote=引用 8 楼 的回复:]
有的时候 也许可能别人怎么跟你讲解你都不懂
但是没关系 不懂的地方记一下
用的多了 自然就懂了
还有 数据库操作都那几步
工作中 没人管你懂不懂 你只要会用 能给他实现就行了
[/Quote]
猴子滴救兵 2012-06-13
  • 打赏
  • 举报
回复
有的时候 也许可能别人怎么跟你讲解你都不懂
但是没关系 不懂的地方记一下
用的多了 自然就懂了
还有 数据库操作都那几步
工作中 没人管你懂不懂 你只要会用 能给他实现就行了
zychere 2012-06-13
  • 打赏
  • 举报
回复
不是很理解。。
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:
哦。。我是新手,再弱弱的问下,生成对象不是要用new关键字么?

引用 4 楼 的回复:
是调用这个方法啊
然后可以生成一个Statement对象
然后这个对象可以执行sql语句
查询用executeQuery,返回一个Resultset结果集
更新用executeUpdate,返回一个整数,即受影响行数
生成对象可以用new,但是你可以把new这个过程外……
[/Quote]
jlu_lamp_lamp 2012-06-12
  • 打赏
  • 举报
回复
是调用这个方法啊
然后可以生成一个Statement对象
然后这个对象可以执行sql语句
查询用executeQuery,返回一个Resultset结果集
更新用executeUpdate,返回一个整数,即受影响行数
zychere 2012-06-12
  • 打赏
  • 举报
回复
conn.createStatement() 可以理解成conn调用createStatement()方法么?[Quote=引用 2 楼 的回复:]
引用楼主 的回复:
Java code
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.Statement ;
public class InsertDemo01{
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = ……
[/Quote]
SpringHiSay 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
Java code
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.Statement ;
public class InsertDemo01{
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt……
[/Quote]
主要是创建statement对象,对数据库进行一些操作...
jlu_lamp_lamp 2012-06-12
  • 打赏
  • 举报
回复
就是用conn连接创建一个statement对象,这个对象有executeUpdate方法执行传入的sql语句

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧