日期:2014-05-20  浏览次数:20878 次

conn.createStatement() 这个东西不太明白,求解答
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.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()”怎么会联系到一起?不明白,求解答,谢谢

------解决方案--------------------
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"的方式创建的对象跟当前连接没有关系,所以系统不知道该为这个对象使用哪一个数据库连接,造成多用户使用时产生错乱。


------解决方案--------------------
其实我也是个菜鸟,不过我还是想说几句:
连mysql ,是一系列的过程,这个过程有诸多对象参与:
首先要有database的驱动,Class.forName(DBDRIVER) ;这里已经注册驱动了;

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

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

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

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

演讲完毕,谢谢。其实我应该放你,没你的提问谁去想这问题啊