Avatar billede khinge Nybegynder
08. marts 2004 - 10:18 Der er 21 kommentarer og
1 løsning

Problemer med insættelse i MS SQL database fra Java.

Jeg har et problem når jeg indsætter noget i min database fra java, ved hjælp af prepared statements. Den fylder feltet helt ud. Eks. jeg har et felt der er af typen varchat(10) og jeg sætter noget ind på 6, så smider den selv 4 spaces på i enden.
Her er noget java kode. Håber nogen kan hjælpe.
public void createGroup(String groupAlias,
                        String groupName,
                        String groupDescription,
                        String isClass) {
        con = DBConnect.getConnection();
        try {
            PreparedStatement stmt =
                    con.prepareStatement(    "insert into Groups (groupAlias, groupName, isClass,  groupDescription) " +                                "values (?,?,?,?)");
            stmt.setString(1, groupAlias);
            stmt.setString(2, groupName);
            stmt.setString(3, isClass);
            stmt.setString(4, groupDescription);
           
            stmt.executeUpdate();
           
        } catch (Exception e) {
            System.out.println(e);
        }
    }

Altså groupAlias er varchar(10), groupName er varchar(50) og groupDescription er text. De bliver allesammen fyldt ud.
Avatar billede arne_v Ekspert
08. marts 2004 - 10:24 #1
Det lyder altså grangiveligt som at enten er felterne CHAR(n) og ikke VARCHAR(n)
eller så bliver der padded i din applikation.

Jeg har aldrig oplevet at JDBC har padded selv.
Avatar billede khinge Nybegynder
08. marts 2004 - 10:28 #2
Det er varchar(n)... Ved ikke lige hvad padded er for noget, men jeg har kontrolleret strengene inden jeg kalser setString på dem og der fylder de kun det de skal...
Avatar billede khinge Nybegynder
08. marts 2004 - 10:29 #3
kalser = kalder
Avatar billede arne_v Ekspert
08. marts 2004 - 10:32 #4
padder = fylder ud med fyld til en vis længde
Avatar billede arne_v Ekspert
08. marts 2004 - 10:32 #5
mystisk
Avatar billede trer Nybegynder
08. marts 2004 - 10:36 #6
Du har også checket din tabeldefinition? 

I øvrigt - at TEXT bliver "fyldt ud" lyder meget specielt - grænsen for et blob felt er over 2 Gigabyte data!
Avatar billede khinge Nybegynder
08. marts 2004 - 10:39 #7
nu ved jeg heller ikke helt præcist hvor meget den fylder lige netop på den. Men der bliver i hvert fald fyldt noget på... og ja jeg har kontrolleret min tabel definition.
Avatar billede trer Nybegynder
08. marts 2004 - 10:44 #8
Prøv at sætte en sql profiler trace op på din server, begræns tracen til aktuelle database (filter på db id) og tilføj SQL Statements til tracen.

Start så tracen og afvikl derefter din java applet. Når dit statement er kørt stopper du tracen.

Nu vil du i tracen kunne se den præcise SQL der sendes til din server. Er strengene her padded (fyldt ud) så er problemet i din Java Applet, er de ikke fyldt ud, så er problemet i din SQL Server opsætning.
Avatar billede trer Nybegynder
08. marts 2004 - 10:44 #9
.. og så kan vi tage den videre derfra ...
Avatar billede khinge Nybegynder
08. marts 2004 - 11:11 #10
i min trace ser det ud til den har padded en hel del...
Avatar billede khinge Nybegynder
08. marts 2004 - 11:13 #11
Det ser meget mærkeligt ud... der er enormt meget mellemrum mellem de forskellige værdier.
Avatar billede trer Nybegynder
08. marts 2004 - 11:15 #12
Fint. Så er problemet i din Java del.

Jeg kender ikke meget til Java (kan stave til det, men det er næsten også det :-) - men hvis du har en "metadata import" af tabel-definitioner til applikationen så bør du refreshe den.
Avatar billede trer Nybegynder
08. marts 2004 - 11:16 #13
Hmm... hvis du har UNICODE strenge i din Java Applet bør du benytte NVARCHAR og NTEXT fremfor VARCHAR og TEXT.
Avatar billede khinge Nybegynder
09. marts 2004 - 18:12 #14
Undskyld jeg ikke lige har skrevet tilbage, har været syg... vil lige prøve det med nvarchar imorgen...
Avatar billede khinge Nybegynder
10. marts 2004 - 09:53 #15
Den padder også med nvarchar. Og forresten så importere jeg ikke noget metadata...
Avatar billede khinge Nybegynder
10. marts 2004 - 10:19 #16
Ok, jeg har fundet ud af at det er ODBC driveren der ikke kan finde ud af det... Har skiftet til en jtds driver og det fungere fint.
Avatar billede arne_v Ekspert
10. marts 2004 - 10:52 #17
Hvorfor bruger du ikke JDBC driveren fra Microsoft ??
Avatar billede khinge Nybegynder
10. marts 2004 - 11:08 #18
Er det ikke ODBC der er fra Microsoft?
Avatar billede khinge Nybegynder
10. marts 2004 - 11:11 #19
aaahhh ok, det ved jeg ikke.... nu var det jtds jeg fandt først....
Avatar billede khinge Nybegynder
10. marts 2004 - 11:11 #20
og den fungere fint.
Avatar billede arne_v Ekspert
10. marts 2004 - 11:17 #21
ODBC er en Microsoft teknologi. Og helt udmærket.

JDBC ODBC bridgen som kommer med Java SDK er fra SUN. Og det er noget lort.

Men Microsoft har faktisk releaset en ægte JDBC driver:
  http://www.microsoft.com/downloads/details.aspx?FamilyID=4f8f2f01-1ed7-4c4d-8f7b-3d47969e66ae&DisplayLang=en
Avatar billede khinge Nybegynder
10. marts 2004 - 11:19 #22
Enig i anden linie... ;)

Ok så ved jeg det til en anden gang... takker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester