免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2177 | 回复: 9
打印 上一主题 下一主题

求助各位大大java作业的问题,绝不是代笔啊,只是问几个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-14 02:06 |只看该作者 |倒序浏览
作业基本就是一个利用jdbc连接数据库并且操作数据的编程作业..因为之前没有接触过java,所以都是摸索着来的,这个是我实现的能够读配置文件连接数据库,并且把一个文件的内容导入到数据库中.代码贴在下面,本来我这个程序直接java db 就可以运行了, 可是老师要求运行程序的命令行是java  -classpath .;mysql-connector-java-5.1.18-bin.jar  Populate db.properties student.txt vehicle.txt route.txt stop.txt zone.txt
的格式

因为没有学过java,都是找类似资料来实现的,这个要求找不到相应的资料只能求助各位大大了~拜托拜托了!

还有就是我的代码只是实现了读一个文件进去,老师这个要求是一下子读5个文件进去,分别存到不同的表里,而且要求要用  JDBC PreparedStatement  construct来实现重复的语句...请问这个该怎么修改代码啊

祝路过各位大大一生平安啊!!!


  1. package practice;

  2. import java.io.BufferedReader;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileReader;
  5. import java.util.List;
  6. import java.util.ArrayList;
  7. import java.io.*;
  8. import java.io.File;
  9. import java.io.FileInputStream;  
  10. import java.io.IOException;  
  11. import java.io.InputStreamReader;  
  12. import java.sql.Connection;  
  13. import java.sql.DriverManager;  
  14. import java.sql.SQLException;  
  15. import java.sql.Statement;
  16. public class DB {
  17.     public static void main(String[]args){
  18.         String s;
  19.     int t = 0;
  20.     String[] sa=new String[5];
  21.         List data = new ArrayList();
  22.         try{
  23.         BufferedReader in =new BufferedReader(new FileReader("src/db.properties"));
  24.         while((s=in.readLine())!=null){
  25.             sa[t] =s.substring(0);
  26.             t++;
  27.         }
  28.         }
  29.         catch(FileNotFoundException e){
  30.             e.printStackTrace();
  31.         }
  32.         catch(IOException e){
  33.             e.printStackTrace();
  34.         }
  35.        /*connect the DB*/
  36.     String url = "jdbc:mysql://"+sa[0]+":"+sa[1]+"/"+sa[2];
  37.     String username = sa[3];
  38.     String password = sa[4];
  39.     Connection conn = null;
  40.     Statement stmt = null;
  41.     try{
  42.         conn = DriverManager.getConnection(url, username, password);  
  43.         stmt = conn.createStatement();  
  44.     }catch (SQLException e1) {  
  45.             e1.printStackTrace();  
  46.         }
  47.     /*put data in DB*/
  48.     File file = new File("D:\\HW3\\HW3\\data\\student.txt");  
  49.     FileInputStream fis = null;   
  50.     try {  
  51.              fis = new FileInputStream(file);  
  52.             InputStreamReader input = new InputStreamReader(fis);  
  53.             BufferedReader br = new BufferedReader(input);  
  54.             String line = null;  
  55.             String sql = null;  
  56.             String info[] = null;  
  57.             String path = file.getAbsolutePath();//得到选择文件的全路径  
  58.             String fileName = path.substring(path.lastIndexOf("\\")+1, path.lastIndexOf("."));//取得所选文件名  
  59.             String province = fileName.substring(0,fileName.length()-2);  
  60.             String cardType = fileName.substring(fileName.length()-2);  
  61.             try {  
  62.                 while((line = br.readLine())!= null){  
  63.                     info = line.split(",");  
  64.                     sql = sql = "insert into cc(A,B,C)values('"+ info[0] +"','"+info[1]+"','"+info[2]+"')";  
  65.                     stmt.executeUpdate(sql);  
  66.                 }  
  67.             } catch (IOException e) {  
  68.                 // TODO Auto-generated catch block  
  69.                 e.printStackTrace();  
  70.             } catch (SQLException e) {  
  71.                 // TODO Auto-generated catch block  
  72.                 e.printStackTrace();  
  73.             }  
  74.                
  75.                
  76.         }catch (FileNotFoundException e) {  
  77.             // TODO Auto-generated catch block  
  78.             e.printStackTrace();  
  79.         }finally{  
  80.             if(conn != null){  
  81.                 try {  
  82.                     conn.close();  
  83.                 } catch (SQLException e) {  
  84.                     // TODO Auto-generated catch block  
  85.                     e.printStackTrace();  
  86.                 }  
  87.             }  
  88.         }  
  89.          
  90.     }
  91.      
  92. }
复制代码


还有就是配置文件路径这个地方有个问题就是我用netbeans能执行的没有问题,可是我把文件拿出来用命令行执行就说我找不到db.properties了,我明明吧程序和db.properties都还有连接驱动都放到一个文件夹下了

论坛徽章:
0
2 [报告]
发表于 2012-11-14 17:03 |只看该作者
本帖最后由 nan_jia 于 2012-11-14 17:04 编辑

BufferedReader in =new BufferedReader(new FileReader("src/db.properties"));
肯定不对
应该是
BufferedReader in =new BufferedReader(new FileReader("db.properties"));

    File file = new File("D:\\HW3\\HW3\\data\\student.txt");  

这些也有问题吧。。

论坛徽章:
0
3 [报告]
发表于 2012-11-15 02:39 |只看该作者
回复 2# nan_jia
可是我已经在netbean上运行,没有问题啊....不过用命令行运行的时候就说找不到文件了..不知道为毛啊,我明明已经把文件放到当前目录下了...
还有就是我现在明白是应该利用java的命令行参数来将文件作为参数导入...可是查来查去也不知道具体该怎么搞,再一个问题就是把不同的txt文件的内容导入不同名称的表,如何用PreparedStatemente避免重复代码啊。

   

论坛徽章:
0
4 [报告]
发表于 2012-11-16 09:41 |只看该作者
把代码发来,我给你整。。

论坛徽章:
0
5 [报告]
发表于 2012-11-16 12:10 |只看该作者
回复 4# nan_jia
啊啊
感谢这位好心大大啊!!我现在已经实现了的功能是用命令行参数读入一个配置文件去连接数据库,然后在读一个文件将该文件的内容存入数据库已有的表里。可是我们老师要求的是读五个文件,然后将这五个文件分别存入不同的已存在的表里面?请问我存入数据那块的代码就要重复写五遍吗?  下面是我全部代码
  1. import java.io.BufferedReader;
  2. import java.io.FileNotFoundException;
  3. import java.io.FileReader;
  4. import java.util.List;
  5. import java.util.ArrayList;
  6. import java.io.*;
  7. import java.io.File;
  8. import java.io.FileInputStream;  
  9. import java.io.IOException;  
  10. import java.io.InputStreamReader;  
  11. import java.sql.Connection;  
  12. import java.sql.DriverManager;  
  13. import java.sql.SQLException;  
  14. import java.sql.PreparedStatement;

  15. public class db {
  16.     public static void main(String[]args){
  17.     /*read the properties*/
  18.         String s;
  19.         int t = 0;
  20.         String[] sa=new String[5];
  21.         List data = new ArrayList();
  22.         try{
  23.         BufferedReader in =new BufferedReader(new FileReader(args[0]));
  24.         while((s=in.readLine())!=null){
  25.             sa[t] =s.substring(0);
  26.                         t++;
  27.         }
  28.         }
  29.         catch(FileNotFoundException e){
  30.             e.printStackTrace();
  31.         }
  32.         catch(IOException e){
  33.             e.printStackTrace();
  34.         }
  35.     /*connect the DB*/
  36.     String url = "jdbc:mysql://"+sa[0]+":"+sa[1]+"/"+sa[2];
  37.     String username = sa[3];
  38.     String password = sa[4];       
  39.     Connection conn = null;
  40.     PreparedStatement stmt = null;
  41.     try{
  42.         conn = DriverManager.getConnection(url, username, password);  
  43.          
  44.         }catch (SQLException e1) {  
  45.             e1.printStackTrace();  
  46.         }
  47.     /*put data in DB*/
  48.         File file = new File(args[1]);  
  49.     FileInputStream fis = null;         
  50.         try {  
  51.              fis = new FileInputStream(file);  
  52.             InputStreamReader input = new InputStreamReader(fis);  
  53.             BufferedReader br = new BufferedReader(input);  
  54.             String line = null;  
  55.             String sql = null;  
  56.             String info[] = null;  
  57.             String path = file.getAbsolutePath();//得到选择文件的全路径  
  58.             String fileName = path.substring(path.lastIndexOf("\\")+1, path.lastIndexOf("."));//取得所选文件名  
  59.             String province = fileName.substring(0,fileName.length()-2);  
  60.             String cardType = fileName.substring(fileName.length()-2);  
  61.             try {  
  62.                 while((line = br.readLine())!= null){  
  63.                     info = line.split(",");  
  64.                     sql = "insert into cc(A,B,C)values('"+ info[0] +"','"+info[1]+"','"+info[2]+"')";  
  65.                     stmt = conn.prepareStatement(sql);
  66.                     stmt.executeUpdate();
  67.                                          }  
  68.             } catch (IOException e) {  
  69.                 // TODO Auto-generated catch block  
  70.                 e.printStackTrace();  
  71.             } catch (SQLException e) {  
  72.                 // TODO Auto-generated catch block  
  73.                 e.printStackTrace();  
  74.             }  
  75.               
  76.                
  77.         }catch (FileNotFoundException e) {  
  78.             // TODO Auto-generated catch block  
  79.             e.printStackTrace();  
  80.         }finally{  
  81.             if(conn != null){  
  82.                 try {  
  83.                     conn.close();  
  84.                 } catch (SQLException e) {  
  85.                     // TODO Auto-generated catch block  
  86.                     e.printStackTrace();  
  87.                 }  
  88.             }  
  89.         }        
  90.                
  91.     }
  92.    
  93. }
复制代码

论坛徽章:
0
6 [报告]
发表于 2012-11-16 14:21 |只看该作者
本帖最后由 nan_jia 于 2012-11-16 14:22 编辑

如果是作业,好像这样也可以。。。。。
预编译要这样写。
  try {  
                 sql = "insert into cc(A,B,C)values(?,?,?)";  
                 stmt = conn.prepareStatement(sql);
                while((line = br.readLine())!= null){  
                     info = line.split(",");
                                 stmt.setString(1,info[0]);
                                         stmt.setString(2,info[1]);
                                         stmt.setString(3,info[2]);                  
                    //stmt.executeUpdate();
                     stmt.addBath();
            }  
                     stmt.exceuteBath();
} catch (Exception e) {  
                e.printStackTrace();  
}

论坛徽章:
0
7 [报告]
发表于 2012-11-16 16:57 |只看该作者
回复 6# nan_jia

哦哦~那我这种preparestatement的写法是不是没有防注入的功能啊?是不是得按照您这格式写才有防注入的功能?还有就是能解答下是不是我导入5个文件的话是和导入一个文件一样的操作呢?要重复写5边一样的代码吗?

论坛徽章:
0
8 [报告]
发表于 2012-11-19 15:06 |只看该作者
5 个文件的话如果有规律写成循环好点,重复5次其实简单一点。

论坛徽章:
0
9 [报告]
发表于 2012-11-20 06:35 |只看该作者
回复 8# nan_jia
  1. while((line = br.readLine())!= null){  
  2.                     info = line.split(",");  
  3.                     sql = "insert into student(studentID,slocation)values(? ,GeomFromText( ' POINT(? ?) ' ) )";                       
  4.                     stmt = conn.prepareStatement(sql);
  5.                                         stmt.setString(1, info[0]);
  6.                                         stmt.setString(2, info[1]);
  7.                                         stmt.setString(3, info[2]);
  8.                                        
  9.                     stmt.execute(); }
复制代码
为啥这个一直报错java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1)
                                       


   

论坛徽章:
0
10 [报告]
发表于 2012-11-20 09:04 |只看该作者
insert into student(studentID,slocation)values(? ,GeomFromText( ' POINT(? ) ' ) )

stmt.setString(1, info[0]);
                                        stmt.setString(2, info[1] +"   "+info[2]);

试试看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP