Lưu đường dẫn file và mở file đó vào mysql

edconan93

New Member
10/7/12
20
0
1
26
Mình muốn lưu một đường dẫn file ảnh vào mysql và sau đó load ảnh ra từ csdl nhưng không được,
Mình đã dùng filepath.replaceAll("\\","\\\\"); để chèn thêm \\ vào nhưng không được.
điều lạ là khi mình xuất đường dẫn file ra thì đúng chuẩn nhưng execute ra thì lại lỗi:

INSERT INTO imagesrc( image_src ) VALUES ('C:\Users\Vu Hoang Hiep\Documents\Document.docx');

nếu copy câu lệnh này vào trong sql code r chạy thì nó lưu được đường dẫn nhưng bỏ hết các dấu \ ở trên :

C:UsersVu Hoang HiepDocumentsDocument.docx

?????
mình đọc nhiều tut trên mạng nhưng vẫn không được , mn giúp mình với.Mình cần lưu dưới dạng 2 dấu \\ để sau này còn mở lại = java từ đường dẫn đó được. hic
 

SITUVN

Well-Known Member
25/2/12
965
262
63
Code:
INSERT INTO imagesrc( image_src ) VALUES ('C:\\Users\\Vu Hoang Hiep\\Documents\\Document.docx');
Nó sẽ lưu đúng và sẽ hiển thị trong CSDL là: C:\Users\Vu Hoang Hiep\Documents\Document.docx
 
  • Like
Reactions: edconan93

edconan93

New Member
10/7/12
20
0
1
26
Code:
INSERT INTO imagesrc( image_src ) VALUES ('C:\\Users\\Vu Hoang Hiep\\Documents\\Document.docx');
Nó sẽ lưu đúng và sẽ hiển thị trong CSDL là: C:\Users\Vu Hoang Hiep\Documents\Document.docx
mình biết là thế nhưng không biết cách nào để chèn 2 dấu nháy \\ vào đường dẫn cả,
t2 là như đã nói ở trên , mình xuất string để làm query rồi copy vào trong mysql chạy thì vẫn đc dù bỏ mất dấu\ nhưng nếu chạy chính câu query đó trong java thì lại báo lỗi ???

code của mình đây :
Code:
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        JFileChooser chooser = new JFileChooser();
        chooser.showOpenDialog(null);
        File f = chooser.getSelectedFile();
        fileName = f.getAbsolutePath();
        data.insert(fileName, "imagesrc","image_src");
    }
hàm data.inssert :
Code:
    String idVal = new String();
        try{
String url= "jdbc:mysql://127.0.0.1:3306/test";
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con= DriverManager.getConnection(url,"root","");
            System.out.println("ket noi thanh cong");
            s = con.createStatement( );
           String input = "INSERT INTO "+table+"( "+col+" ) VALUES ('"+in+"');";
            System.out.println(input);
         
            s.executeQuery (input);//truyen cau lenh SQL vào đây để chạy
                             //có thể thay xâu bên trong thành 1 string r nối các xâu lại để thành 1 câu lênh khác
                             //rồi truyền vào s.execute( string lệnh) ;                        
           
    }catch(Exception e){
           JOptionPane.showMessageDialog(null, "loi 2");
    }
    }
 
Sửa lần cuối:

edconan93

New Member
10/7/12
20
0
1
26
có điều lạ là mình dùng prepare statement nhưng vẫn không được dù xuất ra đúng câu lệnh SQL
Code:
 try{
        String url= "jdbc:mysql://127.0.0.1:3306/test";
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con= DriverManager.getConnection(url,"root","");
            System.out.println("ket noi thanh cong");
            s = con.createStatement( );
           
        JFileChooser chooser = new JFileChooser();
        chooser.showOpenDialog(null);
        File f = chooser.getSelectedFile();
        fileName = f.getAbsolutePath().toString();
       
        String input = "INSERT INTO imagesrc ( image_src ) VALUES (?);";
         PreparedStatement p = con.prepareStatement(input);
         p.setString(1, fileName);
          //s.executeQuery(input);
          //  System.out.println(p.toString());
         // System.out.println();
        
            System.out.println(p.toString());
          p.executeQuery();
        //String s= fileName.replaceAll("\\","\\\\");
       // data.insert(fileName, "imagesrc","image_src");
        }
        catch(Exception e){
            System.out.println("loi");
        }
 

SITUVN

Well-Known Member
25/2/12
965
262
63
Trong SQL, kí tự gạch ngược (\) này cũng là một kí tự thoát như trong lập trình. Nên khi chèn nó vào nó sẽ chuyển thành kí tự thoát. Và hình như nó sẽ loại bỏ dấu đó nếu kí tự thoát không hợp lệ.

Vấn đề của bạn mình vẫn chưa rõ như thế nào?
 

edconan93

New Member
10/7/12
20
0
1
26
Trong SQL, kí tự gạch ngược (\) này cũng là một kí tự thoát như trong lập trình. Nên khi chèn nó vào nó sẽ chuyển thành kí tự thoát. Và hình như nó sẽ loại bỏ dấu đó nếu kí tự thoát không hợp lệ.

Vấn đề của bạn mình vẫn chưa rõ như thế nào?
cám ơn bạn mình đã sửa được rồi, mình phải chạy câu lệnh executeupdate trong prepareStatement khi INSERT mới được.