SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.12.2010 22:06:51

Quzya
Участник
Зарегистрирован: 17.12.2010
Сообщений: 2

не воспринимает кирилицу

Мой тейбл не принимает русские буквы.
Хелп.
Код:

import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.Properties;
import java.util.Vector;

import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
public class All_battles {
    All_battles(){
         final JFrame frame = new JFrame("Список баттлів_1");
         
         
         JMenuBar Menu = new JMenuBar();
        Font font = new Font("Arial",Font.PLAIN,14);
        frame.setJMenuBar(Menu);
       
       
       
        JMenu File = new JMenu("Файл");
        File.setFont(font);
        Menu.add(File);
   
        JMenuItem main = new JMenuItem("Головна");
        main.setFont(font);
        File.add(main);
        main.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                new Main_form();
                frame.setVisible(false);
            }
        });
        
        JMenuItem About = new JMenuItem("Про розробника");
        About.setFont(font);
        File.add(About);
        About.addActionListener(new ActionListener(){
             public void actionPerformed(ActionEvent e){
            new About();
        
        }});
        
        JMenuItem Exit = new JMenuItem("Вихід");
        Exit.setFont(font);
        File.add(Exit);
        Exit.addActionListener(new ActionListener (){
            public void actionPerformed(ActionEvent e){
                System.exit(0);
            }
        });
   
   
               
               
               
        JMenu BD = new JMenu("База даних");
        BD.setFont(font);
        Menu.add(BD);
       
        JMenuItem Round = new JMenuItem("Раунд");
        Round.setFont(font);
        BD.add(Round);
         Round.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    new Round();
                    frame.setVisible(false);}});
       
        JMenuItem Ocinku = new JMenuItem("Оцінки суддів");
        Ocinku.setFont(font);
        BD.add(Ocinku);
        Ocinku.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                new Ocinku();
                frame.setVisible(false);}});
       
       
       
        JMenu Tables = new JMenu("Таблиця");
        Tables.setFont(font);
        Menu.add(Tables);
       
        JMenuItem Indabattle2 = new JMenuItem("Indabattle 2");
        Indabattle2.setFont(font);
        Tables.add(Indabattle2);
        Indabattle2.addActionListener(new ActionListener(){
               public void actionPerformed(ActionEvent e){
                   new Indabattle2();
                  frame.setVisible(false);}});
       
        JMenuItem battle8 = new JMenuItem("Восьмий офіціальний баттл");
        battle8.setFont(font);
        Tables.add(battle8);
        battle8.addActionListener(new ActionListener(){
               public void  actionPerformed(ActionEvent e){
                   new battle8();
                  frame.setVisible(false);}});
       
         JMenu help = new JMenu("Довідка");
            help.setFont(font);
            Menu.add(help);
            
            JMenuItem battle = new JMenuItem("Баттл");
            battle.setFont(font);
            help.add(battle);
          
         
         //////////////////////////////////////
         GridLayout extrakt5Layout = new GridLayout(1,2,5,5);
         JPanel panel2 = new JPanel();
         panel2.setLayout(extrakt5Layout);
         frame.add(panel2);
          JButton button6=new JButton ("Видалити");
          panel2.add(button6);
          JButton button10=new JButton ("Редагувати");
          panel2.add(button10);
     
                   
          panel2.setVisible(true);
         
             
         //////////////////////
     GridLayout extrakt4Layout = new GridLayout(1,1,5,5);
        JPanel panel1 = new JPanel();
        panel1.setLayout(extrakt4Layout);
        frame.add(panel1);
         final JTextField edit8 = new JTextField();
         panel1.add(edit8);
         JButton button7=new JButton ("Пошук");
         panel1.setVisible(true);
         panel1.add(button7);
        
         ///////////////////////////////
         frame.setLayout(new FlowLayout());
        GridLayout extrakt3Layout = new GridLayout(8,2,2,2);
        JPanel panel = new JPanel();
        panel.setLayout(extrakt3Layout);
        frame.add(panel);
        JLabel label7 = new JLabel("Код");
         panel.add(label7);
         final JTextField edit7 = new JTextField(10);
         panel.add(edit7);
        JLabel label1 = new JLabel("Назва баттлу");
         panel.add(label1);
         final JTextField edit1 = new JTextField(10);
         panel.add(edit1);
         JLabel label2 = new JLabel("Рік");
         panel.add(label2);
         final JTextField edit2 = new JTextField(10);
         panel.add(edit2);
         JLabel label3 = new JLabel("К-сть раундів");
         panel.add(label3);
         final JTextField edit3 = new JTextField(10);
         panel.add(edit3);
         JLabel label4 = new JLabel("К-ість учасників");
         panel.add(label4);
         final JTextField edit4 = new JTextField(10);
         panel.add(edit4);
         JLabel label5 = new JLabel("Призовий фонд");
         panel.add(label5);
         final JTextField edit5 = new JTextField(10);
         panel.add(edit5);
         JLabel label6 = new JLabel("Переможець");
         panel.add(label6);
         final JTextField edit6 = new JTextField(10);
         panel.add(edit6);
         JButton button1=new JButton ("Додати");
            
       
        button1.addActionListener(new ActionListener(){
           
        private Component table1;

        public void actionPerformed(ActionEvent e){
        
            try {
             Class.forName("com.mysql.jdbc.Driver").newInstance();
         } catch (InstantiationException e3) {
             // TODO Auto-generated catch block
             e3.printStackTrace();
         } catch (IllegalAccessException e3) {
             // TODO Auto-generated catch block
             e3.printStackTrace();
         } catch (ClassNotFoundException e3) {
             // TODO Auto-generated catch block
             e3.printStackTrace();
         }

             
             Connection con = null;
             try {
             //    con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "pit", "");
                  Properties properties=new Properties();
                     properties.setProperty("user","root");
                     properties.setProperty("password","764669");
                     /*
                       настройки указывающие о необходимости конвертировать данные из Unicode
                   в UTF-8, который используется в нашей таблице для хранения данных
                     */
                     String url = "jdbc:mysql://localhost:3306/test" + "?characterEncoding=cp1251";
                     con = DriverManager.getConnection( url, properties );
                     
                     //properties.setProperty("useUnicode","true");
                     //properties.setProperty("characterEncoding","Cp1251");
                    // con =   DriverManager.getConnection("jdbc:mysql://localhost:3306/test",properties);
             } catch (SQLException e3) {
                 // TODO Auto-generated catch block
                 e3.printStackTrace();
             }
             
            PreparedStatement s;
            Statement st = null;
         try {
             st = con.createStatement();
         } catch (SQLException e1) {
             // TODO Auto-generated catch block
             e1.printStackTrace();
         }
            int KOD = 0,PIK,ROUNDS,MC;
            String NAME,WINNER;
            double MONEY;
            //date Data;
            KOD=Integer.parseInt(edit7.getText());
         NAME=edit1.getText();
         PIK=Integer.parseInt(edit2.getText());
         ROUNDS=Integer.parseInt(edit3.getText());
         MC=Integer.parseInt(edit4.getText());
         MONEY=Double.parseDouble(edit5.getText());
         WINNER=edit6.getText();
            //cina=Double.parseDouble(edit2.getText());
         //Kilkist_ludey=Integer.parseInt(edit8.getText());
           
            try {
             ResultSet result = st.executeQuery("set names cp1251");
             st.executeUpdate(
                        //        "INSERT INTO test.tovar(kod,nazva, kilkist) VALUES(67,'One',33)");
                       //    "INSERT INTO test.tovar(kod,nazva, kilkist) VALUES("+Integer.parseInt(edit3.getText())+",'"+edit2.getText()+"',"+Integer.parseInt(edit4.getText())+")");
                         "INSERT INTO test.all_battles(KOD,NAME,PIK,ROUNDS,MC,MONEY,WINNER) VALUES("+KOD+",'"+NAME+"',"+PIK+","+ROUNDS+","+MC+","+MONEY+",'"+WINNER+"')");
         } catch (SQLException e1) {
             // TODO Auto-generated catch block
             e1.printStackTrace();
         }
           
          ResultSet result = null;
            try {
                result = st.executeQuery("select * from test.all_battles");
            } catch (SQLException e7) {
                // TODO Auto-generated catch block
                e7.printStackTrace();
            }
         System.out.println("SQL query executed.");

         new All_battles_1();
        }
                });
         //Додати
   
       
       
        button7.addActionListener(new ActionListener(){
            
            private Component table1;

            public void actionPerformed(ActionEvent e){

                try {
                 Class.forName("com.mysql.jdbc.Driver").newInstance();
             } catch (InstantiationException e3) {
                 // TODO Auto-generated catch block
                 e3.printStackTrace();
             } catch (IllegalAccessException e3) {
                 // TODO Auto-generated catch block
                 e3.printStackTrace();
             } catch (ClassNotFoundException e3) {
                 // TODO Auto-generated catch block
                 e3.printStackTrace();
             }

                 Connection con = null;
                 try {
                 //    con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "pit", "");
                      Properties properties=new Properties();
                         properties.setProperty("user","root");
                         properties.setProperty("password","764669");
                         /*
                           настройки указывающие о необходимости конвертировать данные из Unicode
                       в UTF-8, который используется в нашей таблице для хранения данных
                         */
                         String url = "jdbc:mysql://localhost:3306/test" + "?characterEncoding=Cp1251";
                         con = DriverManager.getConnection( url, properties );

                         //properties.setProperty("useUnicode","true");
                         //properties.setProperty("characterEncoding","Cp1251");
                        // con =   DriverManager.getConnection("jdbc:mysql://localhost:3306/test",properties);
                 } catch (SQLException e3) {
                     // TODO Auto-generated catch block
                     e3.printStackTrace();
                 }

                PreparedStatement s;
                Statement st = null;
             try {
                 st = con.createStatement();
             } catch (SQLException e1) {
                 // TODO Auto-generated catch block
                 e1.printStackTrace();
             }            
     
               
               
                try {
                 ResultSet result = st.executeQuery("set names cp1251");
                 result = st.executeQuery("select * from test.all_battles Where NAME='"+edit8.getText()+"'");
                      while (result.next()) {
                // System.out.printf("%s\t%s\t%s\t%s%n",
                  edit7.setText(result.getString("KOD"));   
                 edit1.setText(result.getString("NAME"));
                 edit2.setText(result.getString("PIK"));
                 edit3.setText(result.getString("ROUNDS"));
                 edit4.setText(result.getString("MC"));
                 edit5.setText(result.getString("MONEY"));
                 edit6.setText(result.getString("WINNER"));
       
             }
                 } catch (SQLException e1) {
                 // TODO Auto-generated catch block
                 e1.printStackTrace();
             }
               
              ResultSet result = null;
                try {
                    result = st.executeQuery("select * from test.all_battles");
                } catch (SQLException e7) {
                    // TODO Auto-generated catch block
                    e7.printStackTrace();
                }
             System.out.println("SQL query executed.");
     
   
            }
           
            });
       

    button6.addActionListener(new ActionListener(){
             
              public void actionPerformed(ActionEvent ae) {
                 

                 try {
                     Class.forName("com.mysql.jdbc.Driver").newInstance();
            
            
                     Properties properties=new Properties();
                     properties.setProperty("user","root");
                     properties.setProperty("password","764669");
                    
                     properties.setProperty("useUnicode","true");
                     properties.setProperty("characterEncoding","cp1251");
                     String url = "jdbc:mysql://localhost:3306/test" + "?characterEncoding=cp1251";
                     Connection    con = DriverManager.getConnection( url, properties );
                  
                     if(!con.isClosed()){
                         System.out.print("good");
                     }
                     System.out.println("Connection established.");
                     Statement st = con.createStatement();
                  
                    
                    // ResultSet result = st.executeQuery("select * from test.sanatorij");
                  

                     ResultSet result = st.executeQuery("select * from test.all_battles");
                     System.out.println("SQL query executed.");
                 // result = st.executeQuery("set names cp1251");
                     ResultSetMetaData md = result.getMetaData();
                     int columnCount = md.getColumnCount();

                     Vector columns = new Vector(columnCount);

                  
                     for(int i=1; i<=columnCount; i++)
                     columns.add(md.getColumnName(i));

                     Vector data = new Vector();
                     Vector row;

                  
                     while(result.next())
                     {
                     row = new Vector(columnCount);
                     for(int i=1; i<=columnCount; i++)
                     {
                     row.add(result.getString(i));
                     }
                     data.add(row);
                     }
                    

                   JTable  table2 = new JTable(data, columns); 
                     frame.add(table2);
                    
                    
                     int r=table2.getSelectedRow();
                
                       Object  k= table2.getValueAt(1,0);
                  
                        
                         System.out.print("r="+r);
           
                        System.out.print("k="+k);
                    
                    
                 int id = Integer.parseInt(edit7.getText());
                 String sql = "DELETE FROM all_battles WHERE KOD = "+id;
               
               
                PreparedStatement statement = con.prepareStatement(sql);
                int rows = statement.executeUpdate();
                              
   
             result = st.executeQuery("select * from test.all_battles");
                     System.out.println("SQL query executed.");
                 // result = st.executeQuery("set names cp1251");     
                    
                 }
                  catch (ClassNotFoundException e1) {
                     System.out.println("Driver not found");
                     return;
                 } catch (InstantiationException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (IllegalAccessException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (SQLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                 new All_battles();
              }
          });
       
   
   
   
    button10.addActionListener(new ActionListener(){
        
        private Component table1;

        public void actionPerformed(ActionEvent e){
        
            try {
             Class.forName("com.mysql.jdbc.Driver").newInstance();
         } catch (InstantiationException e3) {
             // TODO Auto-generated catch block
             e3.printStackTrace();
         } catch (IllegalAccessException e3) {
             // TODO Auto-generated catch block
             e3.printStackTrace();
         } catch (ClassNotFoundException e3) {
             // TODO Auto-generated catch block
             e3.printStackTrace();
         }

             
             Connection con = null;
             try {
             //    con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "pit", "");
                  Properties properties=new Properties();
                     properties.setProperty("user","root");
                     properties.setProperty("password","764669");
                     /*
                       настройки указывающие о необходимости конвертировать данные из Unicode
                   в UTF-8, который используется в нашей таблице для хранения данных
                     */
                     String url = "jdbc:mysql://localhost:3306/test" + "?characterEncoding=cp1251";
                     con = DriverManager.getConnection( url, properties );
                     
                     //properties.setProperty("useUnicode","true");
                     //properties.setProperty("characterEncoding","Cp1251");
                    // con =   DriverManager.getConnection("jdbc:mysql://localhost:3306/test",properties);
             } catch (SQLException e3) {
                 // TODO Auto-generated catch block
                 e3.printStackTrace();
             }
             
            PreparedStatement s;
            Statement st = null;
         try {
             st = con.createStatement();
         } catch (SQLException e1) {
             // TODO Auto-generated catch block
             e1.printStackTrace();
         }
         int KOD = 0,PIK,ROUNDS,MC;
         String NAME,WINNER;
         double MONEY;
         //date Data;
         KOD=Integer.parseInt(edit7.getText());
      NAME=edit1.getText();
      PIK=Integer.parseInt(edit2.getText());
      ROUNDS=Integer.parseInt(edit3.getText());
      MC=Integer.parseInt(edit4.getText());
      MONEY=Double.parseDouble(edit5.getText());
      WINNER=edit6.getText();
           
            try {
             ResultSet result = st.executeQuery("set names cp1251");
             st.executeUpdate(
                        //        "INSERT INTO test.tovar(kod,nazva, kilkist) VALUES(67,'One',33)");
                       //    "INSERT INTO test.tovar(kod,nazva, kilkist) VALUES("+Integer.parseInt(edit3.getText())+",'"+edit2.getText()+"',"+Integer.parseInt(edit4.getText())+")");
                         //"INSERT INTO test.tovar( ,nazva,cina, kilkist) VALUES("+a+",'"+nazva+"',"+cina+","+kilkist+")");
            "UPDATE all_battles Set NAME='"+NAME+"',PIK="+PIK+",ROUNDS="+ROUNDS+",MC="+MC+",MONEY="+MONEY+",WINNER='"+WINNER+"' Where KOD="+KOD+"");
         } catch (SQLException e1) {
             // TODO Auto-generated catch block
             e1.printStackTrace();
         }
           
          ResultSet result = null;
            try {
                result = st.executeQuery("select * from test.all_battles");
            } catch (SQLException e7) {
                // TODO Auto-generated catch block
                e7.printStackTrace();
            }
         System.out.println("SQL query executed.");

         new All_battles_1();
       
       
       
       
        }
       
        });
   
   
   
   
   
   
   
        
         frame.setVisible(true);
         panel.add(button1);
         /////////////////////////////////////////////////// 
                          
        
         try {
            try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
            } catch (InstantiationException e7) {
                // TODO Auto-generated catch block
                e7.printStackTrace();
            } catch (IllegalAccessException e7) {
                // TODO Auto-generated catch block
                e7.printStackTrace();
            }
         //   Connection con = DriverManager.getConnection("com.mysql.jdbc:mysql://localhost:3306/test", "pit", "");
           
          Connection con = null;
        try {
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "764669");
        } catch (SQLException e7) {
            // TODO Auto-generated catch block
            e7.printStackTrace();
        }
            try {
                if(!con.isClosed()){
                    System.out.print("good");
                }
            } catch (SQLException e7) {
                // TODO Auto-generated catch block
                e7.printStackTrace();
            }
            System.out.println("Connection established.");
            Statement st = null;
            try {
                st = con.createStatement();
            } catch (SQLException e7) {
                // TODO Auto-generated catch block
                e7.printStackTrace();
            }
            //ResultSet result = st.executeQuery("select * from tovar");
            ResultSet result = null;
            try {
                result = st.executeQuery("select * from test.all_battles");
            } catch (SQLException e7) {
                // TODO Auto-generated catch block
                e7.printStackTrace();
            }
            System.out.println("SQL query executed.");
   
            ResultSetMetaData md = null;
            try {
                md = result.getMetaData();
            } catch (SQLException e7) {
                // TODO Auto-generated catch block
                e7.printStackTrace();
            }
            int columnCount = 0;
            try {
                columnCount = md.getColumnCount();
            } catch (SQLException e7) {
                // TODO Auto-generated catch block
                e7.printStackTrace();
            }

            Vector columns = new Vector(columnCount);

            //store column names
            for(int i=1; i<=columnCount; i++)
                try {
                    columns.add(md.getColumnName(i));
                } catch (SQLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }

            Vector data = new Vector();
            Vector row;

            //store row data
            try {
                while(result.next())
                {
                row = new Vector(columnCount);
                for(int i=1; i<=columnCount; i++)
                {
                row.add(result.getString(i));
                }
                data.add(row);
                }
            } catch (SQLException e7) {
                // TODO Auto-generated catch block
                e7.printStackTrace();
            }



           final JTable table = new JTable(data, columns);
            JPanel p1= new JPanel();
             p1.add(table);
             JScrollPane scrollBar = new JScrollPane
              (table,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
                  frame.add(scrollBar);
             frame.add(p1);
        }
        catch (ClassNotFoundException e) {
            System.out.println("Driver not found");
            return;
        };
        
        
       
         frame.add(panel2);
        
        frame.setPreferredSize(new Dimension(950, 700));
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

    }
   public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
               // JFrame.setDefaultLookAndFeelDecorated(true);
             new  All_battles();
            }
        });
    }

public void setVisible(boolean b) {
    // TODO Auto-generated method stub
   
}
}

Ошибка:
Код:
view source
print?

Incorrect string value: '\xFB\xFB' for column 'NAME' at row 1

Неактивен

 

#2 18.12.2010 17:53:21

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: не воспринимает кирилицу

1. Почему Вы не используете автоматическую экранировку? Это удобно, это
безопасно, и это избавляет Вас от необходимости преобразовывать кодировки
(то, что Вы не делаете).
2. Выполнять SET NAMES в Java не нужно, в ней прекрасно работает автоопре-
деление кодировки.
3. Если явно указываете characterEncoding, то нужно указывать кодировку
с правильным регистром букв (Cp1251).

По поводу первого пункта можно посмотреть статью: http://sqlinfo.ru/articles/info/13.html
По поводу второго и третьего — в документацию MySQL: http://dev.mysql.com/doc/refman/5.0/en/ … rsets.html

Неактивен

 

#3 18.12.2010 22:42:16

Quzya
Участник
Зарегистрирован: 17.12.2010
Сообщений: 2

Re: не воспринимает кирилицу

paulus написал:

1. Почему Вы не используете автоматическую экранировку? Это удобно, это
безопасно, и это избавляет Вас от необходимости преобразовывать кодировки
(то, что Вы не делаете).
2. Выполнять SET NAMES в Java не нужно, в ней прекрасно работает автоопре-
деление кодировки.
3. Если явно указываете characterEncoding, то нужно указывать кодировку
с правильным регистром букв (Cp1251).

По поводу первого пункта можно посмотреть статью: http://sqlinfo.ru/articles/info/13.html
По поводу второго и третьего — в документацию MySQL: http://dev.mysql.com/doc/refman/5.0/en/ … rsets.html

Всеравно не рабоатет, если исправить регистр.
А если убрать сет неймз, то и латынь н ечитает.

Неактивен

 

#4 20.12.2010 21:13:46

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: не воспринимает кирилицу

Вы правда усложняете себе жизнь sad

celestia:~/tmp$ mysql -e 'CREATE TABLE jt (a VARCHAR(10))' test
celestia:~/tmp$ java -cp /usr/share/java/mysql-connector-java.jar:. Dump привет
celestia:~/tmp$ java -cp /usr/share/java/mysql-connector-java.jar:. Dump медвед
celestia:~/tmp$ mysql -e 'SELECT * FROM jt' test
+--------------+
| a            |
+--------------+
| привет       |
| медвед       |
+--------------+
celestia:~/tmp$ cat Dump.java
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;

public class Dump {
    public static void main (String[] args) {
        try {
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test?user=root");

            PreparedStatement stmt = conn.prepareStatement("INSERT INTO jt VALUES(?)");
            stmt.setString(1, args[0]);
            stmt.executeUpdate();

        } catch (Exception ex) {
            System.out.println("Got error: " + ex.getMessage());
        }
    }
}

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson