专栏首页三言两语JAVA动态创建表以及动态插入数据

JAVA动态创建表以及动态插入数据

(本文年代久远,请谨慎阅读)首先,连接数据库是必做的工作,在温习一下。

连接数据库

利用JDBC驱动链接Mysql数据其实很简单的,第一要下载一个名为 “mysql-connector-java-5.1.20-bin.jar” 驱动包。并解压到相应的目录!5.1.20是版 本号到目前为止这个是最新的版本!

第一、如果你是在命令行方式下开发,需要把mysql-connector-java-5.1.2.0-bin.jar 添加到系统的CLASSPATH中。怎么加到CLASSPATH中我想不要讲了大家也应懂的吧。

第二、如果你是用Eclipse开发工具的话,还要配置一下 “Java Build Path”、具体的操作“点击Eclipse的Project->Properties->Java Build Path->Libraries” 现在在看以的窗口中点击右边的Add External JARs 然后选择mysql-connector-java-5.1.2.0-bin.jar驱动 点击打开就完成了配置。

下面就是Java利用JDBC连接Mysql数据的实例代码:

import java.sql.*;   
  
 public class ConnectMysql {   
    public static void main(String[] args) {   
        String driver = "com.mysql.jdbc.Driver";   
        String url = "jdbc:mysql://192.168.1.112:3306/linksystem";   
        String user = "root";   
        String password = "blog.micxp.com";   
        try {   
            Class.forName(driver);   
            Connection conn = DriverManager.getConnection(url, user, password);   
            if (!conn.isClosed()) {   
                System.out.println("Succeeded connecting to the Database!");   
                Statement statement = conn.createStatement();   
                String sql = "select * from flink_list";   
                ResultSet rs = statement.executeQuery(sql);   
                String name;   
                while (rs.next()) {   
  
                    name = rs.getString("link_name");   
                    System.out.println(name);   
                }   
  
            }   
        } catch (Exception e) {   
            e.printStackTrace();   
  
        }    
    }   
} 
``` 
上述实例包含在完整的结构中,如果只是作为项目程序的一部分,也可以将其写为一个类,在主程序中new对象即可,不再赘述。连接时有时会抛出异常,在一般情况下,密码错误是主要原因,通过mysql工具直接修改即可,另外自己的url也容易出错,上述例中在使用 url="jdbc:mysql://192.168.1.112:3306/linksystem"  时,就抛出异常。改正方法:
- 把192.168.1.112直接改为localhost。
- linksystem是你建表的数据库名称,要换成你自己的。
### 动态建表
一切就绪后,开始动态建表,建表代码如下: 
```java
sqlstr = "create table random_data(";    
sqlstr+= " id int(32),";     
for(i=0;i<nodenum-1;i++) sqlstr+="ND"+i+" int(32),";     
sqlstr+= "ND"+(nodenum-1)+" int(32)";  
sqlstr+= " );";

上述代码可输出如下形式字符串:

create table random_data( id int(32),ND0 int(32),ND1 int(32),ND2 int(32),ND3 int(32),ND4 int(32),ND5 int(32),ND6 int(32) );

即生成一个列名为id,ND0,ND1……的表格,列名显然是动态生成的。生成表格之后要插入数据,现有一ArrayLst存放着全部的数据,要做的就是逐个放入空表中,显然要用到insert语句。

首先我们可以写出如下代码:

for(i=0;i<nodenum-1;i++){  
   for(j=0;j<nolist.get(i).get_feature_count();j++){  
       sqlin = "insert into random_data( id,";  
       for(i=0;i<nodenum-1;i++)sqlin+="ND"+i+",";  
       sqlin+= "ND"+(nodenum-1);  
       sqlin+=") values(";    
    }  
}

可以得到 “ insert into random_data( id,ND0,ND1,ND2,ND3,ND4,ND5,ND6) values( ”的字符串 ,之后的部分必须动态的重构出来,才能拼接完整,令over也是ArrayList类型,是原数据集ArrayList中数据每隔列数个就存入一次得到的,其输出已经形如:

'2','3','1','0','2','1','4',  
'4','2','5','6','2','1','2',  
'3','2','4','0','2','2','0',  

再用 T = T .substring(0,T.length()-1) 这个方法去掉最后重复的逗号,现在,完整的insert语句中values括号内的字符串已经得到,最后过程,有如下代码:

for(i=0;i<over.size();i++){  
   String sqldo = sqlin +"'"+(i+1)+"',"+ over.get(i) + ");";  
   //System.out.println(sqldo);   
   statement.executeUpdate(sqldo);             
}

输出拼接完成的字符串,可得到若干字符串形如:

insert into random_data( id,ND0,ND1,ND2,ND3,ND4,ND5,ND6) values('3','2','4','0','2','2','0');

至此,由以上种种操作,已经得到了以下字符串,显然它们就是是我们想要的sql执行语句:

create table random_data( id int(32),ND0 int(32),ND1 int(32),ND2 int(32),ND3 int(32),ND4 int(32),ND5 int(32),ND6 int(32) );
insert into random_data( id,ND0,ND1,ND2,ND3,ND4,ND5,ND6) values('3','2','4','1','0','3','2');  
select * from random_data where id = "16760"; //具体查询不做详述

由于在for循环中进行,每次拼接完成后随即执行,完成循环的同时也完成了对数据库中数据的插入操作,所以动态建立的表格中便动态插入了数据。

以上所有内容的关键,就是字符串的拼接,以及所遵循的sql语句的书写格式,在实际调试程序时,最好的方法是在mysql-front中的命令调试器(或命令行)中调试输出的字符串,这个过程应该是个考验细心和耐心的过程。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot之springfox(Swagger) spring-boot-starter-swagger

    Springfox的前身是swagger-springmvc,是一个开源的API doc框架,可以将我们的Controller的方法以文档的形式展现,基于Swa...

    王念博客
  • 使用mybatis-generator 插件自动生成实体,Dao,Mapper

    前言:之前一直使用jpa,不用写增删改查的方法,用entityManager封装一套复合查询的方法写sql也是很灵活。之前有用springboot集成mybat...

    王念博客
  • 性能测试中的常见异常分析(转载整理)

    java.lang.OutOfMemoryError: Java heap space 原因:java堆内存不够或者程序中有死循环; 解决:如果是java堆内...

    飞天小子
  • protoc 编译工具

    在进行开发 protoc 之前,你需要首先在你的计算机中安装 protoc 编译工具。

    HoneyMoose
  • 用Java的方式模拟Flutter的Widget的实现(多层括号嵌套)

    Flutter最重要的是Widget,首先我们来写一个类Widget,然后有一个build函数。如下所示:

    AWeiLoveAndroid
  • Servlet3.0 模块化

    前言:原本一个web应用的任何配置都需要在web.xml中进行,因此会使得web.xml变得很混乱,而且灵活性差,因此Servlet 3.0可以将每个Servl...

    王念博客
  • Dubbo使用jsr303框架hibernate-validator遇到 ConstraintDescriptorImpl could not be instantiated

    Dubbo可以集成jsr303标准规范的验证框架,作为验证框架不二人选的hibernate-validator是大家都会经常在项目中使用的,但是在Dubbo使用...

    王念博客
  • 哥们,B/S了解吗?——啥玩意,我是敲代码的

    前言:。。。。。。“学好长时间编程了,JavaSE学完了,前端也简单学了”。。。。。“那你学这么多,讲讲B/S吧”。。。。。。“B/S?这是个啥玩意?没听过”。...

    泰斗贤若如
  • 转发和重定向又是什么“垃圾”——教你再分类

             前言:之前写了几篇JSP的博客,现在又回过头来看Servlet,温故而知新,再回顾回顾,总会有收获的。以前学习Servlet感觉内容很多,现在...

    泰斗贤若如
  • SpringBoot之logback配置

    日志对于应用程序来说是非常重要的,Spring框架本身集成了不少其他工具,我们自身的应用也会使用到第三方库,所以我们推荐在Spring应用中使用SLF4J/Lo...

    王念博客

扫码关注云+社区

领取腾讯云代金券