# String in Datenbank einfügen



## chrism120 (1. Okt 2019)

Hallo , ich habe eine kleine Sorge. Ich dieses String in meine Tabelle einfügen. ja ich weiß ich kann dieses direkt in meinen Befehl reinfügen. Das Ziel ist später in meinem Projetkt solche Kontruktion zu verwenden. 
meine Code ist Folgendes. 

```
String N="11.0.0.0";
        connectDriver("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        connectdb("jdbc:sqlserver://NB4417;database=Unit;","sa","HBm12340");
        insertdb("INSERT INTO Adresse VALUES (N)")
```
wenn ich diese Code compiliere kriege ich folgenden Fehler.
Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    The left-hand side of an assignment must be a variable
    Syntax error on token "'N'", invalid AssignmentOperator

    at pattern.Observer.test.main(test.java:63)
Bitte Hilfe: Danke im Voraus für Ihren Beitrag.


----------



## mihe7 (1. Okt 2019)

chrism120 hat gesagt.:


> (test.java:63)


Was steht denn an der Stelle (Zeile 63 in test.java)?


----------



## chrism120 (1. Okt 2019)

mihe7 hat gesagt.:


> Was steht denn an der Stelle (Zeile 63 in test.java)?


nicht nur das Ende meines Programmes. 
und ich habe eine bisschen gebastelt

```
package pattern.Observer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;

public class test {
    private static ResultSetMetaData res ;
    private static Connection conn=null;
    private static ResultSet resultat =null;
//Connect to Database
    
public static void connectdb(String url,String user,String pass) {

    try {
            conn= DriverManager.getConnection(url,user,pass);
            System.out.println("connection ok");
        
        }catch (SQLException e) {
            System.out.println("problem with the connection");
        }
        
    }
//Connect to driver
public static void connectDriver(String url) {
try {
    Class.forName(url);
    }catch (ClassNotFoundException ex) {
        System.out.println("Problem with drivers " +ex);
    }
}
// insert date in database
public static void  insertdb(String sql) {
    try {
        
    Statement st=conn.createStatement();
    resultat=st.executeQuery(sql);
    
}
    catch (SQLException e) {
        
        System.out.println("Problem with execution  :  " +e);
        
    }
}
///Main
    public static void main(String[] args) {
        String N="11.0.0.0";
        connectDriver("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        connectdb("jdbc:sqlserver://NB4417;database=Unit;","sa","HBm12340");
        insertdb("INSERT INTO Adresse VALUES" +"("+ N +")");
    }

}
```
und bekomme ich diesen Fehler. 
connection ok


Problem with execution  :  com.microsoft.sqlserver.jdbc.SQLServerException: Falsche Syntax in der Nähe von '.0'.


----------



## Thallius (1. Okt 2019)

Also Dein Query ist sinnloss ein INSERT hat folgende Syntax

INSERT INTO tablename (columnname1, columname2,...) VALUES (value1, value 2, ...)


----------



## M.L. (1. Okt 2019)

Und noch ein Hinweis von wg. SQL-Injection


----------



## chrism120 (1. Okt 2019)

Thallius hat gesagt.:


> Also Dein Query ist sinnloss ein INSERT hat folgende Syntax
> 
> INSERT INTO tablename (columnname1, columname2,...) VALUES (value1, value 2, ...)


ich wollte wissen , ob es möglich ist dieses String aufzurufen. anstatt zum Beispiel dies   INSERT INTO Adresse (IP) VAlue ('10.0.0.0'). Da ich ich schon String S = "10.0.0.0" definiert habe.


----------



## mihe7 (1. Okt 2019)

```
String ip = "11.0.0.0";
try(PreparedStatement stmt = conn.prepareStatement("INSERT INTO Adresse VALUES (?)")) {
    stmt.setString(1, ip);
    stmt.executeUpdate();
}
```
(Achtung: direkt hierein aus dem Kopf geschrieben, kann also Fehler enthalten)


----------



## Thallius (1. Okt 2019)

Mach auf die Column einen unique oder primary key. Dann kannst du es so lösen


```
INSERT INTO tablename (IP) VALUES (?) ON DUPLICATE KEY UPDATE IP = ?
```


----------



## mrBrown (1. Okt 2019)

Thallius hat gesagt.:


> Mach auf die Column einen unique oder primary key. Dann kannst du es so lösen
> 
> 
> ```
> ...


Ist das nicht relativ sinnlos, wenn es nur eine Spalte gibt? (und afaik in sqlserver sowieso nicht möglich)


----------



## chrism120 (1. Okt 2019)

mihe7 hat gesagt.:


> ```
> String ip = "11.0.0.0";
> try(PreparedStatement stmt = conn.prepareStatement("INSERT INTO Adresse VALUES (?)")) {
> stmt.setString(1, ip);
> ...


DANKE. das habe ich auch gemacht.


----------



## chrism120 (1. Okt 2019)

Danke euch  !!!!!!!


----------



## chrism120 (1. Okt 2019)

mrBrown hat gesagt.:


> Ist das nicht relativ sinnlos, wenn es nur eine Spalte gibt? (und afaik in sqlserver sowieso nicht möglich)


haha. ich mache einen Test.


----------

